This page is generated the scan_trace.cpp, which parses the trace.txt file that is produced by running the task3.sh Bash script (where the line with the chroot command is uncommented) for the commit 64abad6a.
7F 45 4C 46 01 01 01 03 00 00 00 00 00 00 00 00 02 00 03 00 01 00 00 00 54 80 04 08 34 00 00 00 04 08 00 00 00 00 00 00 34 00 20 00 01 00 28 00 05 00 02 00 01 00 00 00 00 00 00 00 00 80 04 08 00 80 04 08 EE 0D 00 00 EE 0D 00 00 07 00 00 00 01 00 00 00 B8 2D 00 00 00 BB 00 00 00 00 CD 80 A3 D2 87 04 08 B8 A0 86 01 00 50 E8 22 00 00 00 89 C5 89 C2 58 89 E3 50 53 89 D0 E8 CB 00 00 00 89 C3 B8 01 00 00 00 CD 80 5F 5A 59 5B 58 CD 80 57 C3 5F 58 8B 1D D2 87 04 08 01 C3 B8 2D 00 00 00 CD 80 8B 05 D2 87 04 08 89 1D D2 87 04 08 57 C3 00 00 00 00 58 89 45 00 58 50 8D 85 04 00 00 00 5B 89 18 58 50 8D 85 0C 00 00 00 50 B8 03 00 00 00 50 8D 85 04 00 00 00 8B 00 50 8D 85 08 00 00 00 50 B8 01 00 00 00 50 B8 89 80 04 08 81 C5 10 00 00 00 FF D0 81 ED 10 00 00 00 5B 89 03 58 50 8D 85 0C 00 00 00 8B 00 50 B8 01 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 58 0F 84 14 00 00 00 50 8D 85 08 00 00 00 8A 00 0F B6 C0 0F BE C0 E9 06 00 00 00 50 B8 FF FF FF FF 8B 5D 00 53 C3 50 B8 00 00 00 00 8B 5D 00 53 C3 58 89 45 00 58 50 8D 85 04 00 00 00 5B 89 18 58 50 8D 85 08 00 00 00 5B 89 18 58 50 B8 B2 87 04 08 81 C5 0C 00 00 00 FF D0 81 ED 0C 00 00 00 50 B8 DF 87 04 08 50 8D 85 04 00 00 00 8B 00 50 8D 85 08 00 00 00 8B 00 50 B8 04 00 00 00 5B F7 E3 50 B8 04 00 00 00 5B 01 D8 5B 01 D8 5B 89 03 58 50 8D 85 0C 00 00 00 50 B8 D6 87 04 08 5B 89 03 58 50 8D 85 08 00 00 00 8B 00 50 B8 01 00 00 00 5B 39 C3 0F 9F C0 0F B6 C0 85 C0 58 0F 84 28 00 00 00 50 8D 85 0C 00 00 00 50 8D 85 04 00 00 00 8B 00 50 B8 01 00 00 00 50 B8 04 00 00 00 5B F7 E3 5B 01 D8 8B 00 5B 89 03 58 50 8D 85 10 00 00 00 50 B8 05 00 00 00 50 8D 85 0C 00 00 00 8B 00 50 B8 00 00 00 00 50 B8 FF 01 00 00 50 B8 89 80 04 08 81 C5 14 00 00 00 FF D0 81 ED 14 00 00 00 5B 89 03 58 50 8D 85 10 00 00 00 8B 00 50 B8 00 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 58 0F 84 0B 00 00 00 50 B8 01 00 00 00 8B 5D 00 53 C3 50 8D 85 14 00 00 00 50 8D 85 04 00 00 00 8B 00 50 8D 85 08 00 00 00 8B 00 50 B8 01 00 00 00 5B 01 D8 50 B8 04 00 00 00 5B F7 E3 5B 01 D8 5B 89 03 58 50 8D 85 E0 00 00 00 50 8D 85 18 00 00 00 5B 89 03 58 50 8D 85 E4 00 00 00 50 8D 85 10 00 00 00 8B 00 50 B8 B5 80 04 08 81 C5 E8 00 00 00 FF D0 81 ED E8 00 00 00 5B 89 03 58 50 8D 85 E4 00 00 00 8B 00 50 B8 FF FF FF FF 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 0F 85 19 00 00 00 58 50 8D 85 E4 00 00 00 8B 00 50 B8 0A 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 0F 85 19 00 00 00 58 50 8D 85 E4 00 00 00 8B 00 50 B8 23 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 58 0F 84 05 00 00 00 E9 33 00 00 00 50 8D 85 E0 00 00 00 50 8B 00 50 B8 01 00 00 00 5B 01 D8 5B 89 03 50 B8 01 00 00 00 5B 29 C3 89 D8 50 8D 85 E4 00 00 00 8B 00 5B 88 03 58 E9 3D FF FF FF 50 8D 85 E0 00 00 00 8B 00 50 B8 00 00 00 00 5B 88 03 58 50 8D 85 10 01 00 00 50 B8 00 00 00 00 5B 89 03 58 50 8D 85 E0 00 00 00 50 8D 85 18 00 00 00 5B 89 03 58 50 8D 85 E0 00 00 00 8B 00 8A 00 0F B6 C0 0F BE C0 50 B8 20 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 0F 85 21 00 00 00 58 50 8D 85 E0 00 00 00 8B 00 8A 00 0F B6 C0 0F BE C0 50 B8 09 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 0F 94 C0 0F B6 C0 85 C0 58 0F 84 05 00 00 00 E9 27 00 00 00 50 8D 85 E0 00 00 00 50 8B 00 50 B8 01 00 00 00 5B 01 D8 5B 89 03 50 B8 01 00 00 00 5B 29 C3 89 D8 58 E9 7A FF FF FF 50 8D 85 E0 00 00 00 8B 00 8A 00 0F B6 C0 0F BE C0 50 B8 00 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 58 0F 84 05 00 00 00 E9 FC 00 00 00 50 8D 85 E8 00 00 00 50 8D 85 10 01 00 00 50 8B 00 50 B8 01 00 00 00 5B 01 D8 5B 89 03 50 B8 01 00 00 00 5B 29 C3 89 D8 50 B8 04 00 00 00 5B F7 E3 5B 01 D8 50 8D 85 E0 00 00 00 8B 00 5B 89 03 58 50 8D 85 E0 00 00 00 8B 00 8A 00 0F B6 C0 0F BE C0 50 B8 20 00 00 00 5B 39 C3 0F 9F C0 0F B6 C0 85 C0 0F 94 C0 0F B6 C0 85 C0 58 0F 84 05 00 00 00 E9 27 00 00 00 50 8D 85 E0 00 00 00 50 8B 00 50 B8 01 00 00 00 5B 01 D8 5B 89 03 50 B8 01 00 00 00 5B 29 C3 89 D8 58 E9 A3 FF FF FF 50 8D 85 E0 00 00 00 8B 00 8A 00 0F B6 C0 0F BE C0 50 B8 00 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 58 0F 84 05 00 00 00 E9 30 00 00 00 50 8D 85 E0 00 00 00 50 8B 00 50 B8 01 00 00 00 5B 01 D8 5B 89 03 50 B8 01 00 00 00 5B 29 C3 89 D8 50 B8 00 00 00 00 5B 88 03 58 E9 50 FE FF FF 50 8D 85 E8 00 00 00 50 8D 85 10 01 00 00 8B 00 50 B8 04 00 00 00 5B F7 E3 5B 01 D8 50 B8 00 00 00 00 5B 89 03 58 50 8D 85 10 01 00 00 8B 00 50 B8 00 00 00 00 5B 39 C3 0F 9F C0 0F B6 C0 85 C0 58 0F 84 35 01 00 00 50 8D 85 14 01 00 00 50 B8 02 00 00 00 50 B8 00 00 00 00 50 B8 00 00 00 00 50 B8 00 00 00 00 50 B8 89 80 04 08 81 C5 18 01 00 00 FF D0 81 ED 18 01 00 00 5B 89 03 58 50 8D 85 14 01 00 00 8B 00 50 B8 FF FF FF FF 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 58 0F 84 0B 00 00 00 50 B8 01 00 00 00 8B 5D 00 53 C3 50 8D 85 14 01 00 00 8B 00 50 B8 00 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 58 0F 84 51 00 00 00 50 B8 0B 00 00 00 50 8D 85 E8 00 00 00 50 B8 00 00 00 00 50 B8 04 00 00 00 5B F7 E3 5B 01 D8 8B 00 50 8D 85 E8 00 00 00 50 8D 85 14 00 00 00 8B 00 50 B8 89 80 04 08 81 C5 18 01 00 00 FF D0 81 ED 18 01 00 00 58 50 B8 01 00 00 00 8B 5D 00 53 C3 50 B8 07 00 00 00 50 8D 85 14 01 00 00 8B 00 50 8D 85 18 01 00 00 50 B8 00 00 00 00 50 B8 89 80 04 08 81 C5 1C 01 00 00 FF D0 81 ED 1C 01 00 00 58 50 8D 85 18 01 00 00 8B 00 50 B8 00 00 00 00 5B 39 C3 0F 95 C0 0F B6 C0 85 C0 58 0F 84 0E 00 00 00 50 8D 85 18 01 00 00 8B 00 8B 5D 00 53 C3 50 8D 85 E4 00 00 00 8B 00 50 B8 23 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 58 0F 84 7C 00 00 00 50 8D 85 E4 00 00 00 50 8D 85 10 00 00 00 8B 00 50 B8 B5 80 04 08 81 C5 14 01 00 00 FF D0 81 ED 14 01 00 00 5B 89 03 58 50 8D 85 E4 00 00 00 8B 00 50 B8 FF FF FF FF 5B 39 C3 0F 95 C0 0F B6 C0 85 C0 0F 84 19 00 00 00 58 50 8D 85 E4 00 00 00 8B 00 50 B8 0A 00 00 00 5B 39 C3 0F 95 C0 0F B6 C0 85 C0 0F 94 C0 0F B6 C0 85 C0 58 0F 84 05 00 00 00 E9 05 00 00 00 E9 84 FF FF FF 50 8D 85 E4 00 00 00 8B 00 50 B8 FF FF FF FF 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 58 0F 84 05 00 00 00 E9 05 00 00 00 E9 01 FB FF FF 50 B8 00 00 00 00 8B 5D 00 53 C3 50 B8 00 00 00 00 8B 5D 00 53 C3 58 89 45 00 58 50 B8 DF 87 04 08 50 B8 00 00 00 00 5B 89 03 58 50 B8 00 00 00 00 8B 5D 00 53 C3 00 00 00 00 6B 61 65 6D 2E 78 38 36 00 00 00 00 00 00 2E 74 65 78 74 00 2E 73 68 73 74 72 74 61 62 00 2E 73 79 6D 74 61 62 00 2E 73 74 72 74 61 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 06 00 00 00 54 80 04 08 54 00 00 00 7E 07 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 07 00 00 00 03 00 00 00 00 00 00 00 E3 87 04 08 E3 07 00 00 21 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 19 00 00 00 03 00 00 00 00 00 00 00 CC 88 04 08 CC 08 00 00 42 02 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 11 00 00 00 02 00 00 00 00 00 00 00 0E 8B 04 08 0E 0B 00 00 E0 02 00 00 03 00 00 00 2E 00 00 00 01 00 00 00 10 00 00 00 00 45 4C 46 5F 74 65 78 74 00 5F 73 74 61 72 74 00 66 5F 73 79 73 5F 69 6E 74 38 30 00 66 5F 73 79 73 5F 6D 61 6C 6C 6F 63 00 53 59 53 5F 4D 41 4C 4C 4F 43 00 66 5F 66 68 67 65 74 63 00 5F 66 68 67 65 74 63 5F 65 6C 73 65 31 00 5F 66 68 67 65 74 63 5F 65 6C 73 65 5F 65 6E 64 31 00 66 5F 6D 61 69 6E 00 5F 6D 61 69 6E 5F 65 6C 73 65 31 00 5F 6D 61 69 6E 5F 65 6C 73 65 32 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 33 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 34 00 5F 6D 61 69 6E 5F 6F 72 5F 65 6E 64 35 00 5F 6D 61 69 6E 5F 6F 72 5F 65 6E 64 36 00 5F 6D 61 69 6E 5F 65 6C 73 65 37 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 5F 65 6E 64 34 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 38 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 39 00 5F 6D 61 69 6E 5F 6F 72 5F 65 6E 64 31 30 00 5F 6D 61 69 6E 5F 65 6C 73 65 31 31 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 5F 65 6E 64 39 00 5F 6D 61 69 6E 5F 65 6C 73 65 31 32 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 31 33 00 5F 6D 61 69 6E 5F 65 6C 73 65 31 34 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 5F 65 6E 64 31 33 00 5F 6D 61 69 6E 5F 65 6C 73 65 31 35 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 5F 65 6E 64 38 00 5F 6D 61 69 6E 5F 65 6C 73 65 31 37 00 5F 6D 61 69 6E 5F 65 6C 73 65 31 38 00 5F 6D 61 69 6E 5F 65 6C 73 65 31 39 00 5F 6D 61 69 6E 5F 65 6C 73 65 31 36 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 32 31 00 5F 6D 61 69 6E 5F 61 6E 64 5F 65 6E 64 32 32 00 5F 6D 61 69 6E 5F 65 6C 73 65 32 33 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 5F 65 6E 64 32 31 00 5F 6D 61 69 6E 5F 65 6C 73 65 32 30 00 5F 6D 61 69 6E 5F 65 6C 73 65 32 34 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 5F 65 6E 64 33 00 66 5F 5F 5F 69 6E 69 74 5F 67 6C 6F 62 61 6C 73 5F 5F 00 45 4C 46 5F 64 61 74 61 00 53 59 53 5F 4D 41 4C 4C 4F 43 00 73 74 72 69 6E 67 5F 30 00 67 5F 5F 73 79 73 5F 65 6E 76 00 45 4C 46 5F 65 6E 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 00 00 00 54 80 04 08 00 00 00 00 02 00 01 00 0A 00 00 00 54 80 04 08 00 00 00 00 02 02 01 00 11 00 00 00 89 80 04 08 00 00 00 00 02 00 01 00 1D 00 00 00 92 80 04 08 00 00 00 00 02 00 01 00 1B 02 00 00 D2 87 04 08 00 00 00 00 02 00 01 00 35 00 00 00 B5 80 04 08 00 00 00 00 02 00 01 00 3E 00 00 00 35 81 04 08 00 00 00 00 02 02 01 00 4C 00 00 00 3B 81 04 08 00 00 00 00 02 02 01 00 5E 00 00 00 4B 81 04 08 00 00 00 00 02 00 01 00 65 00 00 00 05 82 04 08 00 00 00 00 02 02 01 00 71 00 00 00 6B 82 04 08 00 00 00 00 02 02 01 00 7D 00 00 00 9D 82 04 08 00 00 00 00 02 02 01 00 89 00 00 00 AF 82 04 08 00 00 00 00 02 02 01 00 95 00 00 00 10 83 04 08 00 00 00 00 02 02 01 00 A3 00 00 00 31 83 04 08 00 00 00 00 02 02 01 00 B1 00 00 00 3F 83 04 08 00 00 00 00 02 02 01 00 BD 00 00 00 72 83 04 08 00 00 00 00 02 02 01 00 CD 00 00 00 A8 83 04 08 00 00 00 00 02 02 01 00 D9 00 00 00 A8 83 04 08 00 00 00 00 02 02 01 00 E5 00 00 00 F1 83 04 08 00 00 00 00 02 02 01 00 F4 00 00 00 07 84 04 08 00 00 00 00 02 02 01 00 01 01 00 00 2E 84 04 08 00 00 00 00 02 02 01 00 11 01 00 00 5C 84 04 08 00 00 00 00 02 02 01 00 1E 01 00 00 9D 84 04 08 00 00 00 00 02 02 01 00 2B 01 00 00 D3 84 04 08 00 00 00 00 02 02 01 00 38 01 00 00 FA 84 04 08 00 00 00 00 02 02 01 00 49 01 00 00 28 85 04 08 00 00 00 00 02 02 01 00 56 01 00 00 58 85 04 08 00 00 00 00 02 02 01 00 66 01 00 00 02 86 04 08 00 00 00 00 02 02 01 00 73 01 00 00 74 86 04 08 00 00 00 00 02 02 01 00 80 01 00 00 D4 86 04 08 00 00 00 00 02 02 01 00 8D 01 00 00 D4 86 04 08 00 00 00 00 02 02 01 00 9A 01 00 00 F5 86 04 08 00 00 00 00 02 02 01 00 A7 01 00 00 56 87 04 08 00 00 00 00 02 02 01 00 B7 01 00 00 6C 87 04 08 00 00 00 00 02 02 01 00 C4 01 00 00 71 87 04 08 00 00 00 00 02 02 01 00 D5 01 00 00 71 87 04 08 00 00 00 00 02 02 01 00 E2 01 00 00 97 87 04 08 00 00 00 00 02 02 01 00 EF 01 00 00 9C 87 04 08 00 00 00 00 02 02 01 00 FF 01 00 00 B2 87 04 08 00 00 00 00 02 00 01 00 12 02 00 00 D2 87 04 08 00 00 00 00 02 00 01 00 1B 02 00 00 D2 87 04 08 00 00 00 00 02 00 01 00 26 02 00 00 D6 87 04 08 00 00 00 00 02 00 01 00 2F 02 00 00 DF 87 04 08 00 00 00 00 02 00 01 00 3A 02 00 00 EE 8D 04 08 00 00 00 00 02 00 01 00
7F 45 4C 46 01 01 01 03 00 00 00 00 00 00 00 00 02 00 03 00 01 00 00 00 54 80 04 08 34 00 00 00 E0 04 00 00 00 00 00 00 34 00 20 00 01 00 28 00 05 00 02 00 01 00 00 00 00 00 00 00 00 80 04 08 00 80 04 08 BE 08 00 00 BE 08 00 00 07 00 00 00 01 00 00 00 B8 2D 00 00 00 BB 00 00 00 00 CD 80 A3 B7 84 04 08 B8 A0 86 01 00 50 E8 22 00 00 00 89 C5 89 C2 58 89 E3 50 53 89 D0 E8 35 00 00 00 89 C3 B8 01 00 00 00 CD 80 5F 5A 59 5B 58 CD 80 57 C3 5F 58 8B 1D B7 84 04 08 01 C3 B8 2D 00 00 00 CD 80 8B 05 B7 84 04 08 89 1D B7 84 04 08 57 C3 00 00 00 00 58 89 45 00 58 50 8D 85 04 00 00 00 5B 89 18 58 50 8D 85 08 00 00 00 5B 89 18 58 50 B8 97 84 04 08 81 C5 0C 00 00 00 FF D0 81 ED 0C 00 00 00 50 B8 BB 84 04 08 50 8D 85 04 00 00 00 8B 00 50 8D 85 08 00 00 00 8B 00 50 B8 04 00 00 00 5B F7 E3 50 B8 04 00 00 00 5B 01 D8 5B 01 D8 5B 89 03 58 50 8D 85 0C 00 00 00 50 B8 05 00 00 00 50 8D 85 04 00 00 00 8B 00 50 B8 01 00 00 00 50 B8 04 00 00 00 5B F7 E3 5B 01 D8 8B 00 50 B8 00 00 00 00 50 B8 FF 01 00 00 50 B8 89 80 04 08 81 C5 10 00 00 00 FF D0 81 ED 10 00 00 00 5B 89 03 58 50 8D 85 10 00 00 00 50 B8 05 00 00 00 50 8D 85 04 00 00 00 8B 00 50 B8 02 00 00 00 50 B8 04 00 00 00 5B F7 E3 5B 01 D8 8B 00 50 B8 41 02 00 00 50 B8 FF 01 00 00 50 B8 89 80 04 08 81 C5 14 00 00 00 FF D0 81 ED 14 00 00 00 5B 89 03 58 50 8D 85 14 00 00 00 50 B8 00 00 00 00 5B 89 03 58 50 8D 85 18 00 00 00 50 B8 00 00 00 00 5B 89 03 58 50 B8 03 00 00 00 50 8D 85 0C 00 00 00 8B 00 50 8D 85 1C 00 00 00 50 B8 01 00 00 00 50 B8 89 80 04 08 81 C5 20 00 00 00 FF D0 81 ED 20 00 00 00 85 C0 0F 94 C0 0F B6 C0 85 C0 58 0F 84 05 00 00 00 E9 FF 01 00 00 50 8D 85 1C 00 00 00 8A 00 0F B6 C0 50 B8 20 00 00 00 5B 39 C3 0F 9E C0 0F B6 C0 85 C0 58 0F 84 05 00 00 00 E9 D1 01 00 00 50 8D 85 1C 00 00 00 8A 00 0F B6 C0 50 B8 23 00 00 00 5B 39 C3 0F 94 C0 0F B6 C0 85 C0 58 0F 84 74 00 00 00 50 B8 03 00 00 00 50 8D 85 0C 00 00 00 8B 00 50 8D 85 1C 00 00 00 50 B8 01 00 00 00 50 B8 89 80 04 08 81 C5 20 00 00 00 FF D0 81 ED 20 00 00 00 85 C0 0F 84 1C 00 00 00 58 50 8D 85 1C 00 00 00 8A 00 0F B6 C0 50 B8 0A 00 00 00 5B 39 C3 0F 95 C0 0F B6 C0 85 C0 0F 94 C0 0F B6 C0 85 C0 58 0F 84 05 00 00 00 E9 05 00 00 00 E9 91 FF FF FF E9 39 01 00 00 50 B8 30 00 00 00 50 8D 85 1C 00 00 00 8A 00 0F B6 C0 5B 39 C3 0F 9E C0 0F B6 C0 85 C0 0F 84 1C 00 00 00 58 50 8D 85 1C 00 00 00 8A 00 0F B6 C0 50 B8 39 00 00 00 5B 39 C3 0F 9E C0 0F B6 C0 85 C0 58 0F 84 21 00 00 00 50 8D 85 1C 00 00 00 50 8A 00 0F B6 C0 50 B8 30 00 00 00 5B 29 C3 89 D8 5B 88 03 58 E9 27 00 00 00 50 8D 85 1C 00 00 00 50 8A 00 0F B6 C0 50 B8 41 00 00 00 50 B8 0A 00 00 00 5B 29 C3 89 D8 5B 29 C3 89 D8 5B 88 03 58 50 8D 85 14 00 00 00 8B 00 85 C0 58 0F 84 64 00 00 00 50 8D 85 1C 00 00 00 50 8A 00 0F B6 C0 50 8D 85 18 00 00 00 8B 00 5B 01 D8 5B 88 03 58 50 B8 04 00 00 00 50 8D 85 10 00 00 00 8B 00 50 8D 85 1C 00 00 00 50 B8 01 00 00 00 50 B8 89 80 04 08 81 C5 20 00 00 00 FF D0 81 ED 20 00 00 00 58 50 8D 85 14 00 00 00 50 B8 00 00 00 00 5B 89 03 58 E9 33 00 00 00 50 8D 85 18 00 00 00 50 8D 85 1C 00 00 00 8A 00 0F B6 C0 50 B8 04 00 00 00 89 C1 58 D3 E0 5B 89 03 58 50 8D 85 14 00 00 00 50 B8 01 00 00 00 5B 89 03 58 E9 BB FD FF FF 50 B8 06 00 00 00 50 8D 85 10 00 00 00 8B 00 50 B8 00 00 00 00 50 B8 00 00 00 00 50 B8 89 80 04 08 81 C5 20 00 00 00 FF D0 81 ED 20 00 00 00 58 50 B8 0F 00 00 00 50 8D 85 04 00 00 00 8B 00 50 B8 02 00 00 00 50 B8 04 00 00 00 5B F7 E3 5B 01 D8 8B 00 50 B8 FF 01 00 00 50 B8 00 00 00 00 50 B8 89 80 04 08 81 C5 20 00 00 00 FF D0 81 ED 20 00 00 00 58 50 B8 00 00 00 00 8B 5D 00 53 C3 58 89 45 00 58 50 B8 BB 84 04 08 50 B8 00 00 00 00 5B 89 03 58 50 B8 00 00 00 00 8B 5D 00 53 C3 00 00 00 00 00 00 00 00 00 2E 74 65 78 74 00 2E 73 68 73 74 72 74 61 62 00 2E 73 79 6D 74 61 62 00 2E 73 74 72 74 61 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 06 00 00 00 54 80 04 08 54 00 00 00 63 04 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 07 00 00 00 03 00 00 00 00 00 00 00 BF 84 04 08 BF 04 00 00 21 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 19 00 00 00 03 00 00 00 00 00 00 00 A8 85 04 08 A8 05 00 00 56 01 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 11 00 00 00 02 00 00 00 00 00 00 00 FE 86 04 08 FE 06 00 00 C0 01 00 00 03 00 00 00 1C 00 00 00 01 00 00 00 10 00 00 00 00 45 4C 46 5F 74 65 78 74 00 5F 73 74 61 72 74 00 66 5F 73 79 73 5F 69 6E 74 38 30 00 66 5F 73 79 73 5F 6D 61 6C 6C 6F 63 00 53 59 53 5F 4D 41 4C 4C 4F 43 00 66 5F 6D 61 69 6E 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 31 00 5F 6D 61 69 6E 5F 65 6C 73 65 32 00 5F 6D 61 69 6E 5F 65 6C 73 65 33 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 35 00 5F 6D 61 69 6E 5F 61 6E 64 5F 65 6E 64 36 00 5F 6D 61 69 6E 5F 65 6C 73 65 37 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 5F 65 6E 64 35 00 5F 6D 61 69 6E 5F 65 6C 73 65 34 00 5F 6D 61 69 6E 5F 61 6E 64 5F 65 6E 64 38 00 5F 6D 61 69 6E 5F 65 6C 73 65 39 00 5F 6D 61 69 6E 5F 65 6C 73 65 5F 65 6E 64 39 00 5F 6D 61 69 6E 5F 65 6C 73 65 31 30 00 5F 6D 61 69 6E 5F 65 6C 73 65 5F 65 6E 64 31 30 00 5F 6D 61 69 6E 5F 65 6C 73 65 5F 65 6E 64 34 00 5F 6D 61 69 6E 5F 65 6C 73 65 5F 65 6E 64 33 00 5F 6D 61 69 6E 5F 6C 6F 6F 70 5F 65 6E 64 31 00 66 5F 5F 5F 69 6E 69 74 5F 67 6C 6F 62 61 6C 73 5F 5F 00 45 4C 46 5F 64 61 74 61 00 53 59 53 5F 4D 41 4C 4C 4F 43 00 67 5F 5F 73 79 73 5F 65 6E 76 00 45 4C 46 5F 65 6E 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 00 00 00 54 80 04 08 00 00 00 00 02 00 01 00 0A 00 00 00 54 80 04 08 00 00 00 00 02 02 01 00 11 00 00 00 89 80 04 08 00 00 00 00 02 00 01 00 1D 00 00 00 92 80 04 08 00 00 00 00 02 00 01 00 38 01 00 00 B7 84 04 08 00 00 00 00 02 00 01 00 35 00 00 00 B5 80 04 08 00 00 00 00 02 00 01 00 3C 00 00 00 D3 81 04 08 00 00 00 00 02 02 01 00 48 00 00 00 19 82 04 08 00 00 00 00 02 02 01 00 54 00 00 00 42 82 04 08 00 00 00 00 02 02 01 00 60 00 00 00 66 82 04 08 00 00 00 00 02 02 01 00 6C 00 00 00 BA 82 04 08 00 00 00 00 02 02 01 00 7B 00 00 00 D0 82 04 08 00 00 00 00 02 02 01 00 87 00 00 00 D5 82 04 08 00 00 00 00 02 02 01 00 97 00 00 00 DA 82 04 08 00 00 00 00 02 02 01 00 A3 00 00 00 19 83 04 08 00 00 00 00 02 02 01 00 B2 00 00 00 43 83 04 08 00 00 00 00 02 02 01 00 BE 00 00 00 6A 83 04 08 00 00 00 00 02 02 01 00 CE 00 00 00 E0 83 04 08 00 00 00 00 02 02 01 00 DB 00 00 00 13 84 04 08 00 00 00 00 02 02 01 00 EC 00 00 00 13 84 04 08 00 00 00 00 02 02 01 00 FC 00 00 00 13 84 04 08 00 00 00 00 02 02 01 00 0C 01 00 00 18 84 04 08 00 00 00 00 02 02 01 00 1C 01 00 00 97 84 04 08 00 00 00 00 02 00 01 00 2F 01 00 00 B7 84 04 08 00 00 00 00 02 00 01 00 38 01 00 00 B7 84 04 08 00 00 00 00 02 00 01 00 43 01 00 00 BB 84 04 08 00 00 00 00 02 00 01 00 4E 01 00 00 BE 88 04 08 00 00 00 00 02 00 01 00
#! /usr/bin/env bash # Mes --- Maxwell Equations of Software # Copyright © 2017,2019 Jan Nieuwenhuizen <janneke@gnu.org> # Copyright © 2017,2019 Jeremiah Orians # # This file is part of Mes. # # Mes is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or (at # your option) any later version. # # Mes is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Mes. If not, see <http://www.gnu.org/licenses/>. # Can also be run by kaem or any other shell of your personal choice # To run in kaem simply: kaem --verbose --strict ################################################## # Phase 0-11 Build hex0 from bootstrapped binary # ################################################## ./bootstrap-seeds/POSIX/x86/kaem-optional-seed ./x86/tools-seed-kaem.kaem ./x86/artifact/kaem-0 ./x86/tools-mini-kaem.kaem ./usr/bin/kaem --file ./x86/check-tools.kaem ./usr/bin/kaem --file ./x86/tools-kaem.kaem ####################################### # Run remaining phases with full kaem # ####################################### ./usr/bin/kaem --verbose --strict --file ./x86/after.kaem
#! /usr/bin/env bash ./bootstrap-seeds/POSIX/x86/hex0-seed ./x86/hex0_s.hex0 ./usr/bin/hex0 ./usr/bin/hex0 ./x86/kaem-minimal_s.hex0 ./x86/artifact/kaem-0
### Copyright (C) 2016 Jeremiah Orians
### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
### This file is part of M2-Planet.
###
### M2-Planet is free software: you can redistribute it and/or modify
### it under the terms of the GNU General Public License as published by
### the Free Software Foundation, either version 3 of the License, or
### (at your option) any later version.
###
### M2-Planet is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
### GNU General Public License for more details.
###
### You should have received a copy of the GNU General Public License
### along with M2-Planet. If not, see <http://www.gnu.org/licenses/>.
### stage0's hex2 format
### !<label> 1 byte relative
### $<label> 2 byte address
### @<label> 2 byte relative
### &<label> 4 byte address
### %<label> 4 byte relative
### if you wish to use this header, you need to add :ELF_end to the end of your
### M1 or hex2 files.
## ELF Header
7F 45 4C 46 # e_ident[EI_MAG0-3] ELF's magic number
01 # e_ident[EI_CLASS] Indicating 32 bit
01 # e_ident[EI_DATA] Indicating little endianness
01 # e_ident[EI_VERSION] Indicating original elf
03 # e_ident[EI_OSABI] Set at 3 because FreeBSD is strict
00 # e_ident[EI_ABIVERSION] See above
00 00 00 00 00 00 00 # e_ident[EI_PAD]
02 00 # e_type Indicating Executable
03 00 # e_machine Indicating 386
01 00 00 00 # e_version Indicating original elf
54800408 # e_entry Address of the entry point
34000000 # e_phoff Address of program header table
E0040000 # e_shoff Address of section header table
00 00 00 00 # e_flags
34 00 # e_ehsize Indicating our 52 Byte header
20 00 # e_phentsize size of a program header table
01 00 # e_phnum number of entries in program table
28 00 # e_shentsize size of a section header table
05 00 # e_shnum number of entries in section table
02 00 # e_shstrndx index of the section names
01 00 00 00 # ph_type: PT-LOAD = 1
00 00 00 00 # ph_offset
00800408 # ph_vaddr
00800408 # ph_physaddr
BE080000 # ph_filesz
BE080000 # ph_memsz
07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7
01 00 00 00 # ph_alignment
#
#:ELF_text
#
#:_start
B8 2D000000 # mov_eax, %45 # the Syscall # for SYS_BRK
BB 00000000 # mov_ebx, %0 # Get current brk
CD80 # int_80 # Let the kernel do the work
A3 B7840408 # mov_[DWORD],eax &SYS_MALLOC # Set our malloc pointer
#
# # allocate memory for the second stack
B8 A0860100 # mov_eax, %100000
50 # push_eax # (sys_malloc assums address)
E8 22000000 # call %f_sys_malloc
89C5 # mov_ebp,eax
#
# # setup argc and argv for the main function
89C2 # mov_edx,eax
58 # pop_eax
89E3 # mov_ebx,esp
50 # push_eax
53 # push_ebx
89D0 # mov_eax,edx
#
# #call main
E8 35000000 # call %f_main
#
# # program completed Successfully
89C3 # mov_ebx,eax # All is well
B8 01000000 # mov_eax, %1 # put the exit syscall number in eax
CD80 # int_80 # Call it a good day
#
## These sys_ function follow the same calling conventions
## as all the other functions. To access the arguments on the stack
## the return address is stored in the edi address (which is only possible
## because these functions do not call other function) and the function
## address (which is stored in the eax register, the top of the stack)
## needs to be popped as well.
#
#:f_sys_int80
5F # pop_edi # Save return address from the stack
5A # pop_edx # Get the arguments from the stack
59 # pop_ecx
5B # pop_ebx
58 # pop_eax
CD80 # int_80 # call the Kernel
57 # push_edi # restore return address to the stack
C3 # ret
#
#:f_sys_malloc
5F # pop_edi
58 # pop_eax
8B1D B7840408 # mov_ebx,[DWORD] &SYS_MALLOC # Using the current pointer
01C3 # add_ebx,eax # Request the number of desired bytes
B8 2D000000 # mov_eax, %45 # the Syscall # for SYS_BRK
CD80 # int_80 # call the Kernel
8B05 B7840408 # mov_eax,[DWORD] &SYS_MALLOC # Return pointer
891D B7840408 # mov_[DWORD],ebx &SYS_MALLOC # Update pointer
57 # push_edi
C3 # ret
#:SYS_MALLOC
00000000 # NULL
#
#
#
#:f_main
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # __init_globals__ (function)
B8 97840408 # mov_eax, &f___init_globals__
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
50 # push_eax # _sys_env (global)
B8 BB840408 # mov_eax, &g__sys_env
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # fin (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # 5
B8 05000000 # mov_eax, %5
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 511
B8 FF010000 # mov_eax, %511
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # fout (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 5
B8 05000000 # mov_eax, %5
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2
B8 02000000 # mov_eax, %2
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # 577
B8 41020000 # mov_eax, %577
50 # push_eax # 511
B8 FF010000 # mov_eax, %511
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # state (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # first (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex0.c 32
#:_main_loop1
50 # push_eax # 3
B8 03000000 # mov_eax, %3
50 # push_eax # fin (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else2
E9 FF010000 # jmp %_main_loop_end1
## hex0.c 33
## hex0.c 34
#:_main_else2 # no else
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else3
## hex0.c 35
E9 D1010000 # jmp %_main_else_end3
#:_main_else3
## hex0.c 36
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 35
B8 23000000 # mov_eax, %35
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 74000000 # je %_main_else4
## hex0.c 37
## hex0.c 38
#:_main_loop5
50 # push_eax # 3
B8 03000000 # mov_eax, %3
50 # push_eax # fin (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
85C0 # test_eax,eax # &&
0F84 1C000000 # je %_main_and_end6
58 # pop_eax
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_main_and_end6
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else7
E9 05000000 # jmp %_main_loop_end5
## hex0.c 39
#:_main_else7 # no else
E9 91FFFFFF # jmp %_main_loop5
#:_main_loop_end5
E9 39010000 # jmp %_main_else_end4
#:_main_else4
## hex0.c 42
## hex0.c 43
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 1C000000 # je %_main_and_end8
58 # pop_eax
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 57
B8 39000000 # mov_eax, %57
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
#:_main_and_end8
85C0 # test_eax,eax # if
58 # pop_eax
0F84 21000000 # je %_main_else9
## hex0.c 44
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # $ (dup)
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 48
B8 30000000 # mov_eax, %48
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
E9 27000000 # jmp %_main_else_end9
#:_main_else9
## hex0.c 46
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # $ (dup)
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 65
B8 41000000 # mov_eax, %65
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
#:_main_else_end9
## hex0.c 47
50 # push_eax # state (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
85C0 # test_eax,eax # if
58 # pop_eax
0F84 64000000 # je %_main_else10
## hex0.c 48
## hex0.c 49
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # $ (dup)
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # first (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## hex0.c 15
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # fout (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
58 # pop_eax # ;
## hex0.c 51
50 # push_eax # state (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 33000000 # jmp %_main_else_end10
#:_main_else10
## hex0.c 54
## hex0.c 55
50 # push_eax # first (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # ch (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 4
B8 04000000 # mov_eax, %4
89C1 # mov_ecx,eax # <<
58 # pop_eax
D3E0 # shl_eax,cl
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex0.c 56
50 # push_eax # state (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_main_else_end10
#:_main_else_end4
#:_main_else_end3
E9 BBFDFFFF # jmp %_main_loop1
#:_main_loop_end1
## hex0.c 13
50 # push_eax # 6
B8 06000000 # mov_eax, %6
50 # push_eax # fout (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
58 # pop_eax # ;
## hex0.c 16
50 # push_eax # 15
B8 0F000000 # mov_eax, %15
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2
B8 02000000 # mov_eax, %2
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # 511
B8 FF010000 # mov_eax, %511
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f___init_globals__
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # _sys_env (global)
B8 BB840408 # mov_eax, &g__sys_env
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:ELF_data
#
00000000 #:SYS_MALLOC NULL
#:g__sys_env
00000000 # NULL
#
#:ELF_end
# Generated sections
00 # NULL
2E7465787400
2E736873747274616200
2E73796D74616200
2E73747274616200
00000000 #sh_name
00000000 #sh_type
00000000 #sh_flags
00000000 #sh_addr
00000000 #sh_offset
00000000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
01000000 #sh_name
01000000 #sh_type
06000000 #sh_flags
54800408 #sh_addr
54000000 #sh_offset
63040000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
07000000 #sh_name
03000000 #sh_type
00000000 #sh_flags
BF840408 #sh_addr
BF040000 #sh_offset
21000000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
19000000 #sh_name
03000000 #sh_type
00000000 #sh_flags
A8850408 #sh_addr
A8050000 #sh_offset
56010000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
11000000 #sh_name
02000000 #sh_type
00000000 #sh_flags
FE860408 #sh_addr
FE060000 #sh_offset
C0010000 #sh_size
03000000 #sh_link
1C000000 #sh_info
01000000 #sh_addralign
10000000 #sh_entsize
# Generated string table
00 # NULL string
454C465F7465787400 # "ELF_text"
5F737461727400 # "_start"
665F7379735F696E74383000 # "f_sys_int80"
665F7379735F6D616C6C6F6300 # "f_sys_malloc"
5359535F4D414C4C4F4300 # "SYS_MALLOC"
665F6D61696E00 # "f_main"
5F6D61696E5F6C6F6F703100 # "_main_loop1"
5F6D61696E5F656C73653200 # "_main_else2"
5F6D61696E5F656C73653300 # "_main_else3"
5F6D61696E5F6C6F6F703500 # "_main_loop5"
5F6D61696E5F616E645F656E643600# "_main_and_end6"
5F6D61696E5F656C73653700 # "_main_else7"
5F6D61696E5F6C6F6F705F656E643500# "_main_loop_end5"
5F6D61696E5F656C73653400 # "_main_else4"
5F6D61696E5F616E645F656E643800# "_main_and_end8"
5F6D61696E5F656C73653900 # "_main_else9"
5F6D61696E5F656C73655F656E643900# "_main_else_end9"
5F6D61696E5F656C7365313000 # "_main_else10"
5F6D61696E5F656C73655F656E64313000# "_main_else_end10"
5F6D61696E5F656C73655F656E643400# "_main_else_end4"
5F6D61696E5F656C73655F656E643300# "_main_else_end3"
5F6D61696E5F6C6F6F705F656E643100# "_main_loop_end1"
665F5F5F696E69745F676C6F62616C735F5F00# "f___init_globals__"
454C465F6461746100 # "ELF_data"
5359535F4D414C4C4F4300 # "SYS_MALLOC"
675F5F7379735F656E7600 # "g__sys_env"
454C465F656E6400 # "ELF_end"
# END Generated string table
# Generated symbol table
# Required NULL symbol entry
00000000 # st_name
00000000 # st_value
00000000 # st_size
00 # st_info
00 # st_other
0100 # st_shndx
01000000 # st_name
54800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
0A000000 # st_name
54800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
11000000 # st_name
89800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
1D000000 # st_name
92800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
38010000 # st_name
B7840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
35000000 # st_name
B5800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
3C000000 # st_name
D3810408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
48000000 # st_name
19820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
54000000 # st_name
42820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
60000000 # st_name
66820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
6C000000 # st_name
BA820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
7B000000 # st_name
D0820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
87000000 # st_name
D5820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
97000000 # st_name
DA820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
A3000000 # st_name
19830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
B2000000 # st_name
43830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
BE000000 # st_name
6A830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
CE000000 # st_name
E0830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
DB000000 # st_name
13840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
EC000000 # st_name
13840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
FC000000 # st_name
13840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
0C010000 # st_name
18840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
1C010000 # st_name
97840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
2F010000 # st_name
B7840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
38010000 # st_name
B7840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
43010000 # st_name
BB840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
4E010000 # st_name
BE880408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
# END Generated symbol table
### Copyright (C) 2016 Jeremiah Orians
### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
### This file is part of M2-Planet.
###
### M2-Planet is free software: you can redistribute it and/or modify
### it under the terms of the GNU General Public License as published by
### the Free Software Foundation, either version 3 of the License, or
### (at your option) any later version.
###
### M2-Planet is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
### GNU General Public License for more details.
###
### You should have received a copy of the GNU General Public License
### along with M2-Planet. If not, see <http://www.gnu.org/licenses/>.
### stage0's hex2 format
### !<label> 1 byte relative
### $<label> 2 byte address
### @<label> 2 byte relative
### &<label> 4 byte address
### %<label> 4 byte relative
### if you wish to use this header, you need to add :ELF_end to the end of your
### M1 or hex2 files.
## ELF Header
7F 45 4C 46 # e_ident[EI_MAG0-3] ELF's magic number
01 # e_ident[EI_CLASS] Indicating 32 bit
01 # e_ident[EI_DATA] Indicating little endianness
01 # e_ident[EI_VERSION] Indicating original elf
03 # e_ident[EI_OSABI] Set at 3 because FreeBSD is strict
00 # e_ident[EI_ABIVERSION] See above
00 00 00 00 00 00 00 # e_ident[EI_PAD]
02 00 # e_type Indicating Executable
03 00 # e_machine Indicating 386
01 00 00 00 # e_version Indicating original elf
54800408 # e_entry Address of the entry point
34000000 # e_phoff Address of program header table
04080000 # e_shoff Address of section header table
00 00 00 00 # e_flags
34 00 # e_ehsize Indicating our 52 Byte header
20 00 # e_phentsize size of a program header table
01 00 # e_phnum number of entries in program table
28 00 # e_shentsize size of a section header table
05 00 # e_shnum number of entries in section table
02 00 # e_shstrndx index of the section names
01 00 00 00 # ph_type: PT-LOAD = 1
00 00 00 00 # ph_offset
00800408 # ph_vaddr
00800408 # ph_physaddr
EE0D0000 # ph_filesz
EE0D0000 # ph_memsz
07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7
01 00 00 00 # ph_alignment
#
#:ELF_text
#
#:_start
B8 2D000000 # mov_eax, %45 # the Syscall # for SYS_BRK
BB 00000000 # mov_ebx, %0 # Get current brk
CD80 # int_80 # Let the kernel do the work
A3 D2870408 # mov_[DWORD],eax &SYS_MALLOC # Set our malloc pointer
#
# # allocate memory for the second stack
B8 A0860100 # mov_eax, %100000
50 # push_eax # (sys_malloc assums address)
E8 22000000 # call %f_sys_malloc
89C5 # mov_ebp,eax
#
# # setup argc and argv for the main function
89C2 # mov_edx,eax
58 # pop_eax
89E3 # mov_ebx,esp
50 # push_eax
53 # push_ebx
89D0 # mov_eax,edx
#
# #call main
E8 CB000000 # call %f_main
#
# # program completed Successfully
89C3 # mov_ebx,eax # All is well
B8 01000000 # mov_eax, %1 # put the exit syscall number in eax
CD80 # int_80 # Call it a good day
#
## These sys_ function follow the same calling conventions
## as all the other functions. To access the arguments on the stack
## the return address is stored in the edi address (which is only possible
## because these functions do not call other function) and the function
## address (which is stored in the eax register, the top of the stack)
## needs to be popped as well.
#
#:f_sys_int80
5F # pop_edi # Save return address from the stack
5A # pop_edx # Get the arguments from the stack
59 # pop_ecx
5B # pop_ebx
58 # pop_eax
CD80 # int_80 # call the Kernel
57 # push_edi # restore return address to the stack
C3 # ret
#
#:f_sys_malloc
5F # pop_edi
58 # pop_eax
8B1D D2870408 # mov_ebx,[DWORD] &SYS_MALLOC # Using the current pointer
01C3 # add_ebx,eax # Request the number of desired bytes
B8 2D000000 # mov_eax, %45 # the Syscall # for SYS_BRK
CD80 # int_80 # call the Kernel
8B05 D2870408 # mov_eax,[DWORD] &SYS_MALLOC # Return pointer
891D D2870408 # mov_[DWORD],ebx &SYS_MALLOC # Update pointer
57 # push_edi
C3 # ret
#:SYS_MALLOC
00000000 # NULL
#
#
#
#:f_fhgetc
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # fh (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # 3
B8 03000000 # mov_eax, %3
50 # push_eax # fh (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 25
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 14000000 # je %_fhgetc_else1
50 # push_eax # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
E9 06000000 # jmp %_fhgetc_else_end1
#:_fhgetc_else1
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
#:_fhgetc_else_end1
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_main
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # __init_globals__ (function)
B8 B2870408 # mov_eax, &f___init_globals__
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
50 # push_eax # _sys_env (global)
B8 DF870408 # mov_eax, &g__sys_env
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # input_fn (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # 'kaem.x86'
B8 D6870408 # mov_eax, &string_0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 31
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 28000000 # je %_main_else1
## kaem-minimal.c 32
## kaem-minimal.c 33
50 # push_eax # input_fn (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_main_else1 # no else
50 # push_eax # fh (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 5
B8 05000000 # mov_eax, %5
50 # push_eax # input_fn (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 511
B8 FF010000 # mov_eax, %511
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 37
50 # push_eax # fh (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 0B000000 # je %_main_else2
## kaem-minimal.c 38
## kaem-minimal.c 39
50 # push_eax # 1
B8 01000000 # mov_eax, %1
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#:_main_else2 # no else
50 # push_eax # env (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 44
#:_main_loop3
## kaem-minimal.c 45
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
50 # push_eax # line (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 49
#:_main_loop4
## kaem-minimal.c 50
## kaem-minimal.c 51
50 # push_eax # ch (local)
8D85 E4000000 # lea_eax,[ebp+DWORD] %228
50 # push_eax # fh (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # fhgetc (function)
B8 B5800408 # mov_eax, &f_fhgetc
81C5 E8000000 # add_ebp, %232 # ()
FFD0 # call_eax
81ED E8000000 # sub_ebp, %232
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 52
50 # push_eax # ch (local)
8D85 E4000000 # lea_eax,[ebp+DWORD] %228
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 19000000 # jne %_main_or_end5
58 # pop_eax
50 # push_eax # ch (local)
8D85 E4000000 # lea_eax,[ebp+DWORD] %228
8B00 # mov_eax,[eax] # ?
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
#:_main_or_end5
85C0 # test_eax,eax # ||
0F85 19000000 # jne %_main_or_end6
58 # pop_eax
50 # push_eax # ch (local)
8D85 E4000000 # lea_eax,[ebp+DWORD] %228
8B00 # mov_eax,[eax] # ?
50 # push_eax # 35
B8 23000000 # mov_eax, %35
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
#:_main_or_end6
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else7
## kaem-minimal.c 53
E9 33000000 # jmp %_main_loop_end4
## kaem-minimal.c 54
#:_main_else7 # no else
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
50 # push_eax # ch (local)
8D85 E4000000 # lea_eax,[ebp+DWORD] %228
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
E9 3DFFFFFF # jmp %_main_loop4
#:_main_loop_end4
## kaem-minimal.c 56
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # nr_tokens (local)
8D85 10010000 # lea_eax,[ebp+DWORD] %272
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 60
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
50 # push_eax # line (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 62
#:_main_loop8
## kaem-minimal.c 63
## kaem-minimal.c 64
#:_main_loop9
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 21000000 # jne %_main_or_end10
58 # pop_eax
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 9
B8 09000000 # mov_eax, %9
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
#:_main_or_end10
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else11
E9 27000000 # jmp %_main_loop_end9
## kaem-minimal.c 65
#:_main_else11 # no else
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 7AFFFFFF # jmp %_main_loop9
#:_main_loop_end9
## kaem-minimal.c 66
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else12
## kaem-minimal.c 67
E9 FC000000 # jmp %_main_loop_end8
## kaem-minimal.c 68
#:_main_else12 # no else
50 # push_eax # tokens (local)
8D85 E8000000 # lea_eax,[ebp+DWORD] %232
50 # push_eax # nr_tokens (local)
8D85 10010000 # lea_eax,[ebp+DWORD] %272
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 69
#:_main_loop13
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else14
E9 27000000 # jmp %_main_loop_end13
## kaem-minimal.c 70
#:_main_else14 # no else
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 A3FFFFFF # jmp %_main_loop13
#:_main_loop_end13
## kaem-minimal.c 71
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else15
## kaem-minimal.c 72
E9 30000000 # jmp %_main_loop_end8
## kaem-minimal.c 73
#:_main_else15 # no else
50 # push_eax # s (local)
8D85 E0000000 # lea_eax,[ebp+DWORD] %224
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
E9 50FEFFFF # jmp %_main_loop8
#:_main_loop_end8
## kaem-minimal.c 75
50 # push_eax # tokens (local)
8D85 E8000000 # lea_eax,[ebp+DWORD] %232
50 # push_eax # nr_tokens (local)
8D85 10010000 # lea_eax,[ebp+DWORD] %272
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 77
50 # push_eax # nr_tokens (local)
8D85 10010000 # lea_eax,[ebp+DWORD] %272
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 35010000 # je %_main_else16
## kaem-minimal.c 78
50 # push_eax # f (local)
8D85 14010000 # lea_eax,[ebp+DWORD] %276
50 # push_eax # 2
B8 02000000 # mov_eax, %2
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 18010000 # add_ebp, %280 # ()
FFD0 # call_eax
81ED 18010000 # sub_ebp, %280
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## kaem-minimal.c 81
50 # push_eax # f (local)
8D85 14010000 # lea_eax,[ebp+DWORD] %276
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 0B000000 # je %_main_else17
## kaem-minimal.c 82
## kaem-minimal.c 83
50 # push_eax # 1
B8 01000000 # mov_eax, %1
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## kaem-minimal.c 85
#:_main_else17 # no else
50 # push_eax # f (local)
8D85 14010000 # lea_eax,[ebp+DWORD] %276
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 51000000 # je %_main_else18
## kaem-minimal.c 86
## kaem-minimal.c 16
50 # push_eax # 11
B8 0B000000 # mov_eax, %11
50 # push_eax # tokens (local)
8D85 E8000000 # lea_eax,[ebp+DWORD] %232
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # tokens (local)
8D85 E8000000 # lea_eax,[ebp+DWORD] %232
50 # push_eax # env (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 18010000 # add_ebp, %280 # ()
FFD0 # call_eax
81ED 18010000 # sub_ebp, %280
58 # pop_eax # ;
## kaem-minimal.c 89
50 # push_eax # 1
B8 01000000 # mov_eax, %1
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#:_main_else18 # no else
## kaem-minimal.c 17
50 # push_eax # 7
B8 07000000 # mov_eax, %7
50 # push_eax # f (local)
8D85 14010000 # lea_eax,[ebp+DWORD] %276
8B00 # mov_eax,[eax] # ?
50 # push_eax # status (local)
8D85 18010000 # lea_eax,[ebp+DWORD] %280
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 1C010000 # add_ebp, %284 # ()
FFD0 # call_eax
81ED 1C010000 # sub_ebp, %284
58 # pop_eax # ;
## kaem-minimal.c 95
50 # push_eax # status (local)
8D85 18010000 # lea_eax,[ebp+DWORD] %280
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 0E000000 # je %_main_else19
## kaem-minimal.c 96
## kaem-minimal.c 97
50 # push_eax # status (local)
8D85 18010000 # lea_eax,[ebp+DWORD] %280
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#:_main_else19 # no else
## kaem-minimal.c 101
#:_main_else16 # no else
50 # push_eax # ch (local)
8D85 E4000000 # lea_eax,[ebp+DWORD] %228
8B00 # mov_eax,[eax] # ?
50 # push_eax # 35
B8 23000000 # mov_eax, %35
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 7C000000 # je %_main_else20
## kaem-minimal.c 102
## kaem-minimal.c 103
#:_main_loop21
## kaem-minimal.c 104
## kaem-minimal.c 105
50 # push_eax # ch (local)
8D85 E4000000 # lea_eax,[ebp+DWORD] %228
50 # push_eax # fh (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # fhgetc (function)
B8 B5800408 # mov_eax, &f_fhgetc
81C5 14010000 # add_ebp, %276 # ()
FFD0 # call_eax
81ED 14010000 # sub_ebp, %276
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # ch (local)
8D85 E4000000 # lea_eax,[ebp+DWORD] %228
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 19000000 # je %_main_and_end22
58 # pop_eax
50 # push_eax # ch (local)
8D85 E4000000 # lea_eax,[ebp+DWORD] %228
8B00 # mov_eax,[eax] # ?
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_main_and_end22
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else23
E9 05000000 # jmp %_main_loop_end21
#:_main_else23 # no else
E9 84FFFFFF # jmp %_main_loop21
#:_main_loop_end21
## kaem-minimal.c 108
#:_main_else20 # no else
50 # push_eax # ch (local)
8D85 E4000000 # lea_eax,[ebp+DWORD] %228
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else24
## kaem-minimal.c 109
E9 05000000 # jmp %_main_loop_end3
#:_main_else24 # no else
E9 01FBFFFF # jmp %_main_loop3
#:_main_loop_end3
## kaem-minimal.c 111
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f___init_globals__
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # _sys_env (global)
B8 DF870408 # mov_eax, &g__sys_env
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:ELF_data
#
00000000 #:SYS_MALLOC NULL
6B61656D2E78383600 #:string_0 "kaem.x86"
#:g__sys_env
00000000 # NULL
#
#:ELF_end
# Generated sections
00 # NULL
2E7465787400
2E736873747274616200
2E73796D74616200
2E73747274616200
00000000 #sh_name
00000000 #sh_type
00000000 #sh_flags
00000000 #sh_addr
00000000 #sh_offset
00000000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
01000000 #sh_name
01000000 #sh_type
06000000 #sh_flags
54800408 #sh_addr
54000000 #sh_offset
7E070000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
07000000 #sh_name
03000000 #sh_type
00000000 #sh_flags
E3870408 #sh_addr
E3070000 #sh_offset
21000000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
19000000 #sh_name
03000000 #sh_type
00000000 #sh_flags
CC880408 #sh_addr
CC080000 #sh_offset
42020000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
11000000 #sh_name
02000000 #sh_type
00000000 #sh_flags
0E8B0408 #sh_addr
0E0B0000 #sh_offset
E0020000 #sh_size
03000000 #sh_link
2E000000 #sh_info
01000000 #sh_addralign
10000000 #sh_entsize
# Generated string table
00 # NULL string
454C465F7465787400 # "ELF_text"
5F737461727400 # "_start"
665F7379735F696E74383000 # "f_sys_int80"
665F7379735F6D616C6C6F6300 # "f_sys_malloc"
5359535F4D414C4C4F4300 # "SYS_MALLOC"
665F66686765746300 # "f_fhgetc"
5F6668676574635F656C73653100# "_fhgetc_else1"
5F6668676574635F656C73655F656E643100# "_fhgetc_else_end1"
665F6D61696E00 # "f_main"
5F6D61696E5F656C73653100 # "_main_else1"
5F6D61696E5F656C73653200 # "_main_else2"
5F6D61696E5F6C6F6F703300 # "_main_loop3"
5F6D61696E5F6C6F6F703400 # "_main_loop4"
5F6D61696E5F6F725F656E643500# "_main_or_end5"
5F6D61696E5F6F725F656E643600# "_main_or_end6"
5F6D61696E5F656C73653700 # "_main_else7"
5F6D61696E5F6C6F6F705F656E643400# "_main_loop_end4"
5F6D61696E5F6C6F6F703800 # "_main_loop8"
5F6D61696E5F6C6F6F703900 # "_main_loop9"
5F6D61696E5F6F725F656E64313000# "_main_or_end10"
5F6D61696E5F656C7365313100 # "_main_else11"
5F6D61696E5F6C6F6F705F656E643900# "_main_loop_end9"
5F6D61696E5F656C7365313200 # "_main_else12"
5F6D61696E5F6C6F6F70313300 # "_main_loop13"
5F6D61696E5F656C7365313400 # "_main_else14"
5F6D61696E5F6C6F6F705F656E64313300# "_main_loop_end13"
5F6D61696E5F656C7365313500 # "_main_else15"
5F6D61696E5F6C6F6F705F656E643800# "_main_loop_end8"
5F6D61696E5F656C7365313700 # "_main_else17"
5F6D61696E5F656C7365313800 # "_main_else18"
5F6D61696E5F656C7365313900 # "_main_else19"
5F6D61696E5F656C7365313600 # "_main_else16"
5F6D61696E5F6C6F6F70323100 # "_main_loop21"
5F6D61696E5F616E645F656E64323200# "_main_and_end22"
5F6D61696E5F656C7365323300 # "_main_else23"
5F6D61696E5F6C6F6F705F656E64323100# "_main_loop_end21"
5F6D61696E5F656C7365323000 # "_main_else20"
5F6D61696E5F656C7365323400 # "_main_else24"
5F6D61696E5F6C6F6F705F656E643300# "_main_loop_end3"
665F5F5F696E69745F676C6F62616C735F5F00# "f___init_globals__"
454C465F6461746100 # "ELF_data"
5359535F4D414C4C4F4300 # "SYS_MALLOC"
737472696E675F3000 # "string_0"
675F5F7379735F656E7600 # "g__sys_env"
454C465F656E6400 # "ELF_end"
# END Generated string table
# Generated symbol table
# Required NULL symbol entry
00000000 # st_name
00000000 # st_value
00000000 # st_size
00 # st_info
00 # st_other
0100 # st_shndx
01000000 # st_name
54800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
0A000000 # st_name
54800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
11000000 # st_name
89800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
1D000000 # st_name
92800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
1B020000 # st_name
D2870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
35000000 # st_name
B5800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
3E000000 # st_name
35810408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
4C000000 # st_name
3B810408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
5E000000 # st_name
4B810408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
65000000 # st_name
05820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
71000000 # st_name
6B820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
7D000000 # st_name
9D820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
89000000 # st_name
AF820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
95000000 # st_name
10830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
A3000000 # st_name
31830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
B1000000 # st_name
3F830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
BD000000 # st_name
72830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
CD000000 # st_name
A8830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
D9000000 # st_name
A8830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
E5000000 # st_name
F1830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
F4000000 # st_name
07840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
01010000 # st_name
2E840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
11010000 # st_name
5C840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
1E010000 # st_name
9D840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
2B010000 # st_name
D3840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
38010000 # st_name
FA840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
49010000 # st_name
28850408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
56010000 # st_name
58850408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
66010000 # st_name
02860408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
73010000 # st_name
74860408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
80010000 # st_name
D4860408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
8D010000 # st_name
D4860408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
9A010000 # st_name
F5860408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
A7010000 # st_name
56870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
B7010000 # st_name
6C870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
C4010000 # st_name
71870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
D5010000 # st_name
71870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
E2010000 # st_name
97870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
EF010000 # st_name
9C870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
FF010000 # st_name
B2870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
12020000 # st_name
D2870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
1B020000 # st_name
D2870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
26020000 # st_name
D6870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
2F020000 # st_name
DF870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
3A020000 # st_name
EE8D0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
# END Generated symbol table
#! /usr/bin/env bash ./usr/bin/hex0 ./x86/hex2_s.hex0 ./usr/bin/hex2 ./usr/bin/hex2 -o ./usr/bin/blood-elf ./x86/ELF-x86-debug.hex2 ./x86/blood-elf_s.macro ./x86/blood-elf_s.blood_elf ./usr/bin/hex2 -o ./usr/bin/M1 ./x86/ELF-x86-debug.hex2 ./x86/M1_s.macro ./x86/M1_s.blood_elf ./usr/bin/blood-elf --file ./x86/stack_c_s.M1 --little-endian --output ./tmp/stack_c_s.blood_elf ./usr/bin/M1 -o ./tmp/stack_c_s.macro ./x86/stack_c_s.M1 ./usr/bin/hex2 -o ./usr/bin/stack_c ./x86/ELF-x86-debug.hex2 ./tmp/stack_c_s.macro ./tmp/stack_c_s.blood_elf ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./src/tcc_cc.sl -o tmp/tcc_cc.M1 ./usr/bin/blood-elf --file tmp/tcc_cc.M1 --little-endian --output ./tmp/tcc_cc.blood_elf ./usr/bin/M1 ./tmp/tcc_cc.M1 -o ./tmp/tcc_cc.macro ./usr/bin/hex2 -o ./usr/bin/tcc_cc ./x86/ELF-x86-debug.hex2 ./tmp/tcc_cc.macro ./tmp/tcc_cc.blood_elf ./usr/bin/tcc_cc -o ./tmp/kaem.sl ./src/stdlib.c ./src/kaem.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/kaem.sl -o tmp/kaem.M1 ./usr/bin/blood-elf --file tmp/kaem.M1 --little-endian --output ./tmp/kaem.blood_elf ./usr/bin/M1 ./tmp/kaem.M1 -o ./tmp/kaem.macro ./usr/bin/hex2 -o ./usr/bin/kaem ./x86/ELF-x86-debug.hex2 ./tmp/kaem.macro ./tmp/kaem.blood_elf
### Copyright (C) 2016 Jeremiah Orians
### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
### This file is part of M2-Planet.
###
### M2-Planet is free software: you can redistribute it and/or modify
### it under the terms of the GNU General Public License as published by
### the Free Software Foundation, either version 3 of the License, or
### (at your option) any later version.
###
### M2-Planet is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
### GNU General Public License for more details.
###
### You should have received a copy of the GNU General Public License
### along with M2-Planet. If not, see <http://www.gnu.org/licenses/>.
### stage0's hex2 format
### !<label> 1 byte relative
### $<label> 2 byte address
### @<label> 2 byte relative
### &<label> 4 byte address
### %<label> 4 byte relative
### if you wish to use this header, you need to add :ELF_end to the end of your
### M1 or hex2 files.
## ELF Header
7F 45 4C 46 # e_ident[EI_MAG0-3] ELF's magic number
01 # e_ident[EI_CLASS] Indicating 32 bit
01 # e_ident[EI_DATA] Indicating little endianness
01 # e_ident[EI_VERSION] Indicating original elf
03 # e_ident[EI_OSABI] Set at 3 because FreeBSD is strict
00 # e_ident[EI_ABIVERSION] See above
00 00 00 00 00 00 00 # e_ident[EI_PAD]
02 00 # e_type Indicating Executable
03 00 # e_machine Indicating 386
01 00 00 00 # e_version Indicating original elf
54800408 # e_entry Address of the entry point
34000000 # e_phoff Address of program header table
35250000 # e_shoff Address of section header table
00 00 00 00 # e_flags
34 00 # e_ehsize Indicating our 52 Byte header
20 00 # e_phentsize size of a program header table
01 00 # e_phnum number of entries in program table
28 00 # e_shentsize size of a section header table
05 00 # e_shnum number of entries in section table
02 00 # e_shstrndx index of the section names
01 00 00 00 # ph_type: PT-LOAD = 1
00 00 00 00 # ph_offset
00800408 # ph_vaddr
00800408 # ph_physaddr
6D3A0000 # ph_filesz
6D3A0000 # ph_memsz
07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7
01 00 00 00 # ph_alignment
#
#:ELF_text
#
#:_start
B8 2D000000 # mov_eax, %45 # the Syscall # for SYS_BRK
BB 00000000 # mov_ebx, %0 # Get current brk
CD80 # int_80 # Let the kernel do the work
A3 0BA10408 # mov_[DWORD],eax &SYS_MALLOC # Set our malloc pointer
#
# # allocate memory for the second stack
B8 A0860100 # mov_eax, %100000
50 # push_eax # (sys_malloc assums address)
E8 22000000 # call %f_sys_malloc
89C5 # mov_ebp,eax
#
# # setup argc and argv for the main function
89C2 # mov_edx,eax
58 # pop_eax
89E3 # mov_ebx,esp
50 # push_eax
53 # push_ebx
89D0 # mov_eax,edx
#
# #call main
E8 931A0000 # call %f_main
#
# # program completed Successfully
89C3 # mov_ebx,eax # All is well
B8 01000000 # mov_eax, %1 # put the exit syscall number in eax
CD80 # int_80 # Call it a good day
#
## These sys_ function follow the same calling conventions
## as all the other functions. To access the arguments on the stack
## the return address is stored in the edi address (which is only possible
## because these functions do not call other function) and the function
## address (which is stored in the eax register, the top of the stack)
## needs to be popped as well.
#
#:f_sys_int80
5F # pop_edi # Save return address from the stack
5A # pop_edx # Get the arguments from the stack
59 # pop_ecx
5B # pop_ebx
58 # pop_eax
CD80 # int_80 # call the Kernel
57 # push_edi # restore return address to the stack
C3 # ret
#
#:f_sys_malloc
5F # pop_edi
58 # pop_eax
8B1D 0BA10408 # mov_ebx,[DWORD] &SYS_MALLOC # Using the current pointer
01C3 # add_ebx,eax # Request the number of desired bytes
B8 2D000000 # mov_eax, %45 # the Syscall # for SYS_BRK
CD80 # int_80 # call the Kernel
8B05 0BA10408 # mov_eax,[DWORD] &SYS_MALLOC # Return pointer
891D 0BA10408 # mov_[DWORD],ebx &SYS_MALLOC # Update pointer
57 # push_edi
C3 # ret
#:SYS_MALLOC
00000000 # NULL
#
#
#
#:f_malloc
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## hex2.c 27
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 3
B8 03000000 # mov_eax, %3
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 3
B8 03000000 # mov_eax, %3
F7D0 # not_eax # ~
5B # pop_ebx # &
21D8 # and_eax,ebx
50 # push_eax # sys_malloc (function)
B8 92800408 # mov_eax, &f_sys_malloc
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_strcmp
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## hex2.c 31
#:_strcmp_loop1
## hex2.c 32
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 34
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 21000000 # jne %_strcmp_or_end2
58 # pop_eax
50 # push_eax # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
#:_strcmp_or_end2
85C0 # test_eax,eax # if
58 # pop_eax
0F84 0E000000 # je %_strcmp_else3
## hex2.c 35
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## hex2.c 36
#:_strcmp_else3 # no else
50 # push_eax # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## hex2.c 37
50 # push_eax # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 2DFFFFFF # jmp %_strcmp_loop1
#:_strcmp_loop_end1
## hex2.c 39
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_strncmp
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## hex2.c 44
#:_strncmp_loop1
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >
39C3 # cmp_eax_ebx
0F97C0 # seta_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_strncmp_else2
E9 F5000000 # jmp %_strncmp_loop_end1
## hex2.c 45
#:_strncmp_else2 # no else
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 47
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 21000000 # jne %_strncmp_or_end3
58 # pop_eax
50 # push_eax # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
#:_strncmp_or_end3
85C0 # test_eax,eax # if
58 # pop_eax
0F84 0E000000 # je %_strncmp_else4
## hex2.c 48
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## hex2.c 49
#:_strncmp_else4 # no else
50 # push_eax # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## hex2.c 50
50 # push_eax # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
58 # pop_eax # ;
E9 DDFEFFFF # jmp %_strncmp_loop1
#:_strncmp_loop_end1
## hex2.c 52
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_strlen
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 58
#:_strlen_loop1
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_strlen_else2
E9 49000000 # jmp %_strlen_loop_end1
## hex2.c 59
#:_strlen_else2 # no else
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 81FFFFFF # jmp %_strlen_loop1
#:_strlen_loop_end1
## hex2.c 60
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_strncpy
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 67
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_strncpy_loop1
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_strncpy_else2
E9 97000000 # jmp %_strncpy_loop_end1
## hex2.c 68
## hex2.c 69
#:_strncpy_else2 # no else
50 # push_eax # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## hex2.c 70
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_strncpy_else3
## hex2.c 71
E9 27000000 # jmp %_strncpy_loop_end1
#:_strncpy_else3 # no else
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 38FFFFFF # jmp %_strncpy_loop1
#:_strncpy_loop_end1
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_fhputc
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # fh (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## hex2.c 24
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # fh (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_fhgets
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # fh (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # buffer (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 89
#:_fhgets_loop1
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_fhgets_else2
E9 EA000000 # jmp %_fhgets_loop_end1
## hex2.c 90
#:_fhgets_else2 # no else
## hex2.c 92
50 # push_eax # 3
B8 03000000 # mov_eax, %3
50 # push_eax # fh (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 18000000 # add_ebp, %24 # ()
FFD0 # call_eax
81ED 18000000 # sub_ebp, %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 31000000 # je %_fhgets_else3
## hex2.c 93
## hex2.c 94
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 0B000000 # je %_fhgets_else4
## hex2.c 95
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## hex2.c 96
#:_fhgets_else4 # no else
E9 71000000 # jmp %_fhgets_loop_end1
## hex2.c 98
#:_fhgets_else3 # no else
50 # push_eax # buffer (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## hex2.c 99
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_fhgets_else5
## hex2.c 100
E9 05000000 # jmp %_fhgets_loop_end1
#:_fhgets_else5 # no else
E9 DAFEFFFF # jmp %_fhgets_loop1
#:_fhgets_loop_end1
## hex2.c 102
50 # push_eax # buffer (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## hex2.c 103
50 # push_eax # 1
B8 01000000 # mov_eax, %1
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_is_hex
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # ch (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## hex2.c 110
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # ch (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 1F000000 # je %_is_hex_and_end1
58 # pop_eax
50 # push_eax # ch (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 57
B8 39000000 # mov_eax, %57
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
#:_is_hex_and_end1
85C0 # test_eax,eax # if
58 # pop_eax
0F84 1F000000 # je %_is_hex_else2
## hex2.c 111
50 # push_eax # ch (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 48
B8 30000000 # mov_eax, %48
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## hex2.c 112
#:_is_hex_else2 # no else
50 # push_eax # 65
B8 41000000 # mov_eax, %65
50 # push_eax # ch (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 1F000000 # je %_is_hex_and_end3
58 # pop_eax
50 # push_eax # ch (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 70
B8 46000000 # mov_eax, %70
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
#:_is_hex_and_end3
85C0 # test_eax,eax # if
58 # pop_eax
0F84 2A000000 # je %_is_hex_else4
## hex2.c 113
50 # push_eax # ch (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 65
B8 41000000 # mov_eax, %65
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## hex2.c 114
#:_is_hex_else4 # no else
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_pos_for_label
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # len (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # name (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## hex2.c 128
50 # push_eax # label (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # labels (global)
B8 20A10408 # mov_eax, &g_labels
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_pos_for_label_loop1
50 # push_eax # label (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_pos_for_label_else2
E9 C3000000 # jmp %_pos_for_label_loop_end1
## hex2.c 129
#:_pos_for_label_else2 # no else
50 # push_eax # label (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # name (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # len (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # strncmp (function)
B8 0A820408 # mov_eax, &f_strncmp
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 35000000 # je %_pos_for_label_and_end3
58 # pop_eax
50 # push_eax # label (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # len (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
#:_pos_for_label_and_end3
85C0 # test_eax,eax # if
58 # pop_eax
0F84 16000000 # je %_pos_for_label_else4
## hex2.c 130
50 # push_eax # label (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#:_pos_for_label_else4 # no else
50 # push_eax # label (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # label (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ->
81C0 08000000 # add_eax, %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 0FFFFFFF # jmp %_pos_for_label_loop1
#:_pos_for_label_loop_end1
## hex2.c 131
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_process_file
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # end_of_line (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # output_byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # add_labels (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # name (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # f (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 5
B8 05000000 # mov_eax, %5
50 # push_eax # name (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 511
B8 FF010000 # mov_eax, %511
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 18000000 # add_ebp, %24 # ()
FFD0 # call_eax
81ED 18000000 # sub_ebp, %24
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 137
50 # push_eax # f (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 0B000000 # je %_process_file_else1
## hex2.c 138
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#:_process_file_else1 # no else
50 # push_eax # line_nr (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 141
#:_process_file_loop2
50 # push_eax # line (static)
B8 2CA10408 # mov_eax, &static_0_line
50 # push_eax # 999
B8 E7030000 # mov_eax, %999
50 # push_eax # f (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # fhgets (function)
B8 AB850408 # mov_eax, &f_fhgets
81C5 1C000000 # add_ebp, %28 # ()
FFD0 # call_eax
81ED 1C000000 # sub_ebp, %28
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_process_file_else3
E9 EA0C0000 # jmp %_process_file_loop_end2
## hex2.c 142
## hex2.c 143
#:_process_file_else3 # no else
50 # push_eax # line_nr (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # space (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # line (static)
B8 2CA10408 # mov_eax, &static_0_line
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 146
#:_process_file_loop4
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 21000000 # je %_process_file_and_end5
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 35
B8 23000000 # mov_eax, %35
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end5
85C0 # test_eax,eax # &&
0F84 21000000 # je %_process_file_and_end6
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 13
B8 0D000000 # mov_eax, %13
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end6
85C0 # test_eax,eax # &&
0F84 21000000 # je %_process_file_and_end7
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end7
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_process_file_else8
E9 D60A0000 # jmp %_process_file_loop_end4
## hex2.c 147
#:_process_file_else8 # no else
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 38000000 # je %_process_file_else9
## hex2.c 148
## hex2.c 149
50 # push_eax # space (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 150
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 700A0000 # jmp %_process_file_else_end9
#:_process_file_else9
## hex2.c 152
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 58
B8 3A000000 # mov_eax, %58
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 DD010000 # je %_process_file_else10
## hex2.c 153
## hex2.c 154
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # label (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # label_len (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 157
#:_process_file_loop11
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_process_file_else12
E9 49000000 # jmp %_process_file_loop_end11
## hex2.c 158
#:_process_file_else12 # no else
50 # push_eax # label_len (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 81FFFFFF # jmp %_process_file_loop11
#:_process_file_loop_end11
## hex2.c 159
50 # push_eax # label_len (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 0A000000 # je %_process_file_and_end13
58 # pop_eax
50 # push_eax # add_labels (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
#:_process_file_and_end13
85C0 # test_eax,eax # if
58 # pop_eax
0F84 DF000000 # je %_process_file_else14
## hex2.c 160
50 # push_eax # new_label (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # 12
B8 0C000000 # mov_eax, %12
50 # push_eax # malloc (function)
B8 B5800408 # mov_eax, &f_malloc
81C5 30000000 # add_ebp, %48 # ()
FFD0 # call_eax
81ED 30000000 # sub_ebp, %48
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 162
50 # push_eax # new_label (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
50 # push_eax # label_len (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # malloc (function)
B8 B5800408 # mov_eax, &f_malloc
81C5 30000000 # add_ebp, %48 # ()
FFD0 # call_eax
81ED 30000000 # sub_ebp, %48
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 163
50 # push_eax # new_label (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # label (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # label_len (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
50 # push_eax # strncpy (function)
B8 22840408 # mov_eax, &f_strncpy
81C5 30000000 # add_ebp, %48 # ()
FFD0 # call_eax
81ED 30000000 # sub_ebp, %48
58 # pop_eax # ;
## hex2.c 164
50 # push_eax # new_label (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
50 # push_eax # ip (global)
B8 1CA10408 # mov_eax, &g_ip
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 165
50 # push_eax # new_label (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ->
81C0 08000000 # add_eax, %8
50 # push_eax # labels (global)
B8 20A10408 # mov_eax, &g_labels
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 166
50 # push_eax # labels (global)
B8 20A10408 # mov_eax, &g_labels
50 # push_eax # new_label (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_process_file_else14 # no else
E9 6A080000 # jmp %_process_file_else_end10
#:_process_file_else10
## hex2.c 169
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # is_hex (function)
B8 3D870408 # mov_eax, &f_is_hex
81C5 24000000 # add_ebp, %36 # ()
FFD0 # call_eax
81ED 24000000 # sub_ebp, %36
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >=sfv
39C3 # cmp_eax_ebx
0F9DC0 # setge_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 3E000000 # je %_process_file_and_end15
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # is_hex (function)
B8 3D870408 # mov_eax, &f_is_hex
81C5 24000000 # add_ebp, %36 # ()
FFD0 # call_eax
81ED 24000000 # sub_ebp, %36
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >=sfv
39C3 # cmp_eax_ebx
0F9DC0 # setge_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end15
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05010000 # je %_process_file_else16
## hex2.c 170
50 # push_eax # byte (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # is_hex (function)
B8 3D870408 # mov_eax, &f_is_hex
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
50 # push_eax # 4
B8 04000000 # mov_eax, %4
89C1 # mov_ecx,eax # <<
58 # pop_eax
D3E0 # shl_eax,cl
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # is_hex (function)
B8 3D870408 # mov_eax, &f_is_hex
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
5B # pop_ebx # |
09D8 # or_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 172
50 # push_eax # output_byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 2A000000 # je %_process_file_else17
## hex2.c 173
50 # push_eax # byte (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # space (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # output_byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## hex2.c 174
#:_process_file_else17 # no else
50 # push_eax # space (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 175
50 # push_eax # ip (global)
B8 1CA10408 # mov_eax, &g_ip
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## hex2.c 176
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 E2060000 # jmp %_process_file_else_end16
#:_process_file_else16
## hex2.c 178
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 38
B8 26000000 # mov_eax, %38
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 21000000 # jne %_process_file_or_end18
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 37
B8 25000000 # mov_eax, %37
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
#:_process_file_or_end18
85C0 # test_eax,eax # ||
0F85 21000000 # jne %_process_file_or_end19
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 33
B8 21000000 # mov_eax, %33
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
#:_process_file_or_end19
85C0 # test_eax,eax # if
58 # pop_eax
0F84 3C040000 # je %_process_file_else20
## hex2.c 179
50 # push_eax # mode (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 182
#:_process_file_loop21
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 2D000000 # je %_process_file_and_end22
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 35
B8 23000000 # mov_eax, %35
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end22
85C0 # test_eax,eax # &&
0F84 2D000000 # je %_process_file_and_end23
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 62
B8 3E000000 # mov_eax, %62
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end23
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_process_file_else24
E9 27000000 # jmp %_process_file_loop_end21
## hex2.c 183
#:_process_file_else24 # no else
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 2DFFFFFF # jmp %_process_file_loop21
#:_process_file_loop_end21
50 # push_eax # pos (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
50 # push_eax # pos_for_label (function)
B8 48880408 # mov_eax, &f_pos_for_label
81C5 30000000 # add_ebp, %48 # ()
FFD0 # call_eax
81ED 30000000 # sub_ebp, %48
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 185
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 186
50 # push_eax # ip (global)
B8 1CA10408 # mov_eax, &g_ip
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 187
50 # push_eax # mode (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 37
B8 25000000 # mov_eax, %37
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 6D010000 # je %_process_file_else25
## hex2.c 188
## hex2.c 189
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 62
B8 3E000000 # mov_eax, %62
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 29010000 # je %_process_file_else26
## hex2.c 190
## hex2.c 191
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## hex2.c 192
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 193
#:_process_file_loop27
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 2D000000 # je %_process_file_and_end28
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 35
B8 23000000 # mov_eax, %35
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end28
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_process_file_else29
E9 27000000 # jmp %_process_file_loop_end27
## hex2.c 194
#:_process_file_else29 # no else
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 62FFFFFF # jmp %_process_file_loop27
#:_process_file_loop_end27
## hex2.c 195
50 # push_eax # pos (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
50 # push_eax # pos_for_label (function)
B8 48880408 # mov_eax, &f_pos_for_label
81C5 30000000 # add_ebp, %48 # ()
FFD0 # call_eax
81ED 30000000 # sub_ebp, %48
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 196
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # l (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 1B000000 # jmp %_process_file_else_end26
#:_process_file_else26
## hex2.c 199
50 # push_eax # pos (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # ip (global)
B8 1CA10408 # mov_eax, &g_ip
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_process_file_else_end26
#:_process_file_else25 # no else
50 # push_eax # nr_bits (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 33
B8 21000000 # mov_eax, %33
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 0B000000 # je %_process_file_else30
50 # push_eax # 8
B8 08000000 # mov_eax, %8
E9 06000000 # jmp %_process_file_else_end30
#:_process_file_else30
50 # push_eax # 32
B8 20000000 # mov_eax, %32
#:_process_file_else_end30
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 202
50 # push_eax # i (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_process_file_loop31
50 # push_eax # i (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
8B00 # mov_eax,[eax] # ?
50 # push_eax # nr_bits (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_process_file_else32
E9 A3000000 # jmp %_process_file_loop_end31
## hex2.c 203
#:_process_file_else32 # no else
50 # push_eax # byte (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
50 # push_eax # pos (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
8B00 # mov_eax,[eax] # ?
89C1 # mov_ecx,eax # >>
58 # pop_eax
D3E8 # shr_eax,cl
50 # push_eax # 255
B8 FF000000 # mov_eax, %255
5B # pop_ebx # &
21D8 # and_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 205
50 # push_eax # output_byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 2A000000 # je %_process_file_else33
## hex2.c 206
50 # push_eax # byte (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
8B00 # mov_eax,[eax] # ?
50 # push_eax # space (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # output_byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
81C5 3C000000 # add_ebp, %60 # ()
FFD0 # call_eax
81ED 3C000000 # sub_ebp, %60
58 # pop_eax # ;
## hex2.c 207
#:_process_file_else33 # no else
50 # push_eax # space (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 8
B8 08000000 # mov_eax, %8
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 2CFFFFFF # jmp %_process_file_loop31
#:_process_file_loop_end31
E9 2B020000 # jmp %_process_file_else_end20
#:_process_file_else20
## hex2.c 210
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 34
B8 22000000 # mov_eax, %34
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 F7010000 # je %_process_file_else34
## hex2.c 211
## hex2.c 212
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## hex2.c 213
#:_process_file_loop35
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 21000000 # je %_process_file_and_end36
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 34
B8 22000000 # mov_eax, %34
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end36
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_process_file_else37
E9 AC000000 # jmp %_process_file_loop_end35
## hex2.c 214
## hex2.c 215
#:_process_file_else37 # no else
50 # push_eax # output_byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 32000000 # je %_process_file_else38
## hex2.c 216
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # space (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # output_byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
81C5 24000000 # add_ebp, %36 # ()
FFD0 # call_eax
81ED 24000000 # sub_ebp, %36
58 # pop_eax # ;
## hex2.c 217
#:_process_file_else38 # no else
50 # push_eax # space (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 218
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## hex2.c 219
50 # push_eax # ip (global)
B8 1CA10408 # mov_eax, &g_ip
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 F5FEFFFF # jmp %_process_file_loop35
#:_process_file_loop_end35
## hex2.c 221
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 34
B8 22000000 # mov_eax, %34
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 22000000 # je %_process_file_else39
## hex2.c 222
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## hex2.c 223
#:_process_file_else39 # no else
50 # push_eax # output_byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 27000000 # je %_process_file_else40
## hex2.c 224
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # space (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # output_byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
81C5 24000000 # add_ebp, %36 # ()
FFD0 # call_eax
81ED 24000000 # sub_ebp, %36
58 # pop_eax # ;
## hex2.c 225
#:_process_file_else40 # no else
50 # push_eax # space (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 226
50 # push_eax # ip (global)
B8 1CA10408 # mov_eax, &g_ip
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 0B000000 # jmp %_process_file_else_end34
#:_process_file_else34
## hex2.c 229
## hex2.c 233
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#:_process_file_else_end34
#:_process_file_else_end20
#:_process_file_else_end16
#:_process_file_else_end10
#:_process_file_else_end9
E9 79F4FFFF # jmp %_process_file_loop4
#:_process_file_loop_end4
## hex2.c 235
#:_process_file_loop41
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 21000000 # je %_process_file_and_end42
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 35
B8 23000000 # mov_eax, %35
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end42
85C0 # test_eax,eax # &&
0F84 21000000 # je %_process_file_and_end43
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 13
B8 0D000000 # mov_eax, %13
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end43
85C0 # test_eax,eax # &&
0F84 21000000 # je %_process_file_and_end44
58 # pop_eax
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_process_file_and_end44
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_process_file_else45
E9 27000000 # jmp %_process_file_loop_end41
## hex2.c 236
#:_process_file_else45 # no else
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 28FFFFFF # jmp %_process_file_loop41
#:_process_file_loop_end41
## hex2.c 237
50 # push_eax # end_of_line (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 21000000 # je %_process_file_else46
## hex2.c 238
50 # push_eax # s (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # end_of_line (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
81C5 24000000 # add_ebp, %36 # ()
FFD0 # call_eax
81ED 24000000 # sub_ebp, %36
58 # pop_eax # ;
#:_process_file_else46 # no else
E9 D7F2FFFF # jmp %_process_file_loop2
#:_process_file_loop_end2
## hex2.c 22
50 # push_eax # 6
B8 06000000 # mov_eax, %6
50 # push_eax # f (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 1C000000 # add_ebp, %28 # ()
FFD0 # call_eax
81ED 1C000000 # sub_ebp, %28
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_output_hex
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # fh (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## hex2.c 245
50 # push_eax # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 0B000000 # je %_output_hex_else1
50 # push_eax # 48
B8 30000000 # mov_eax, %48
E9 11000000 # jmp %_output_hex_else_end1
#:_output_hex_else1
50 # push_eax # 65
B8 41000000 # mov_eax, %65
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
#:_output_hex_else_end1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # fh (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # fhputc (function)
B8 54850408 # mov_eax, &f_fhputc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_output_hex_byte
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # space (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## hex2.c 253
50 # push_eax # space (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
85C0 # test_eax,eax # if
58 # pop_eax
0F84 44000000 # je %_output_hex_byte_else1
## hex2.c 254
## hex2.c 255
50 # push_eax # 32
B8 20000000 # mov_eax, %32
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
8B00 # mov_eax,[eax] # ?
50 # push_eax # fhputc (function)
B8 54850408 # mov_eax, &f_fhputc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## hex2.c 256
50 # push_eax # col (global)
B8 24A10408 # mov_eax, &g_col
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## hex2.c 258
#:_output_hex_byte_else1 # no else
50 # push_eax # byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 4
B8 04000000 # mov_eax, %4
89C1 # mov_ecx,eax # >>
58 # pop_eax
D3E8 # shr_eax,cl
50 # push_eax # 15
B8 0F000000 # mov_eax, %15
5B # pop_ebx # &
21D8 # and_eax,ebx
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
8B00 # mov_eax,[eax] # ?
50 # push_eax # output_hex (function)
B8 89970408 # mov_eax, &f_output_hex
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## hex2.c 259
50 # push_eax # byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 15
B8 0F000000 # mov_eax, %15
5B # pop_ebx # &
21D8 # and_eax,ebx
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
8B00 # mov_eax,[eax] # ?
50 # push_eax # output_hex (function)
B8 89970408 # mov_eax, &f_output_hex
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## hex2.c 260
50 # push_eax # col (global)
B8 24A10408 # mov_eax, &g_col
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_output_hex_end_of_line
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## hex2.c 265
#:_output_hex_end_of_line_loop1
50 # push_eax # col (global)
B8 24A10408 # mov_eax, &g_col
8B00 # mov_eax,[eax] # ?
50 # push_eax # 30
B8 1E000000 # mov_eax, %30
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_output_hex_end_of_line_else2
E9 49000000 # jmp %_output_hex_end_of_line_loop_end1
## hex2.c 266
#:_output_hex_end_of_line_else2 # no else
50 # push_eax # 32
B8 20000000 # mov_eax, %32
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
8B00 # mov_eax,[eax] # ?
50 # push_eax # fhputc (function)
B8 54850408 # mov_eax, &f_fhputc
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
50 # push_eax # col (global)
B8 24A10408 # mov_eax, &g_col
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 8AFFFFFF # jmp %_output_hex_end_of_line_loop1
#:_output_hex_end_of_line_loop_end1
## hex2.c 267
#:_output_hex_end_of_line_loop3
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 21000000 # je %_output_hex_end_of_line_and_end4
58 # pop_eax
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 13
B8 0D000000 # mov_eax, %13
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_output_hex_end_of_line_and_end4
85C0 # test_eax,eax # &&
0F84 21000000 # je %_output_hex_end_of_line_and_end5
58 # pop_eax
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
#:_output_hex_end_of_line_and_end5
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_output_hex_end_of_line_else6
E9 4B000000 # jmp %_output_hex_end_of_line_loop_end3
## hex2.c 268
#:_output_hex_end_of_line_else6 # no else
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
8B00 # mov_eax,[eax] # ?
50 # push_eax # fhputc (function)
B8 54850408 # mov_eax, &f_fhputc
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
E9 2DFFFFFF # jmp %_output_hex_end_of_line_loop3
#:_output_hex_end_of_line_loop_end3
## hex2.c 269
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
8B00 # mov_eax,[eax] # ?
50 # push_eax # fhputc (function)
B8 54850408 # mov_eax, &f_fhputc
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## hex2.c 270
50 # push_eax # col (global)
B8 24A10408 # mov_eax, &g_col
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_output_byte
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # space (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## hex2.c 275
50 # push_eax # space (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
58 # pop_eax # ;
## hex2.c 276
50 # push_eax # byte (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
8B00 # mov_eax,[eax] # ?
50 # push_eax # fhputc (function)
B8 54850408 # mov_eax, &f_fhputc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f_main
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # __init_globals__ (function)
B8 ABA00408 # mov_eax, &f___init_globals__
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
50 # push_eax # _sys_env (global)
B8 18A10408 # mov_eax, &g__sys_env
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 281
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # output_as_hex (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # nr_input_files (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # output_file (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 286
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_main_loop1
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else2
E9 23010000 # jmp %_main_loop_end1
## hex2.c 287
#:_main_else2 # no else
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '-o'
B8 0FA10408 # mov_eax, &string_0
50 # push_eax # strcmp (function)
B8 06810408 # mov_eax, &f_strcmp
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 52000000 # je %_main_else3
## hex2.c 288
## hex2.c 289
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## hex2.c 290
50 # push_eax # output_file (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 58000000 # jmp %_main_else_end3
#:_main_else3
## hex2.c 293
50 # push_eax # input_files (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # nr_input_files (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_main_else_end3
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 ACFEFFFF # jmp %_main_loop1
#:_main_loop_end1
## hex2.c 295
50 # push_eax # output_file (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 01010000 # je %_main_else4
## hex2.c 296
## hex2.c 297
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
50 # push_eax # 5
B8 05000000 # mov_eax, %5
50 # push_eax # output_file (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
50 # push_eax # 577
B8 41020000 # mov_eax, %577
50 # push_eax # 511
B8 FF010000 # mov_eax, %511
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 40000000 # add_ebp, %64 # ()
FFD0 # call_eax
81ED 40000000 # sub_ebp, %64
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 298
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 0B000000 # je %_main_else5
## hex2.c 299
## hex2.c 303
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#:_main_else5 # no else
50 # push_eax # len (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50 # push_eax # output_file (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
50 # push_eax # strlen (function)
B8 69830408 # mov_eax, &f_strlen
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 306
50 # push_eax # output_as_hex (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # len (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # 5
B8 05000000 # mov_eax, %5
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 4A000000 # je %_main_and_end6
58 # pop_eax
50 # push_eax # output_file (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
50 # push_eax # len (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 5
B8 05000000 # mov_eax, %5
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
50 # push_eax # '.hex0'
B8 12A10408 # mov_eax, &string_1
50 # push_eax # strcmp (function)
B8 06810408 # mov_eax, &f_strcmp
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
#:_main_and_end6
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 309
#:_main_else4 # no else
50 # push_eax # ip (global)
B8 1CA10408 # mov_eax, &g_ip
50 # push_eax # 134512640
B8 00800408 # mov_eax, %134512640
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 310
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_main_loop7
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # nr_input_files (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else8
E9 6C000000 # jmp %_main_loop_end7
## hex2.c 311
#:_main_else8 # no else
50 # push_eax # input_files (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # process_file (function)
B8 7D890408 # mov_eax, &f_process_file
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 63FFFFFF # jmp %_main_loop7
#:_main_loop_end7
## hex2.c 313
50 # push_eax # ip (global)
B8 1CA10408 # mov_eax, &g_ip
50 # push_eax # 134512640
B8 00800408 # mov_eax, %134512640
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## hex2.c 314
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
#:_main_loop9
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # nr_input_files (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 05000000 # je %_main_else10
E9 C8000000 # jmp %_main_loop_end9
## hex2.c 315
#:_main_else10 # no else
50 # push_eax # output_as_hex (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
85C0 # test_eax,eax # if
58 # pop_eax
0F84 4A000000 # je %_main_else11
## hex2.c 316
50 # push_eax # input_files (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # output_hex_byte (function)
B8 22980408 # mov_eax, &f_output_hex_byte
50 # push_eax # output_hex_end_of_line (function)
B8 23990408 # mov_eax, &f_output_hex_end_of_line
50 # push_eax # process_file (function)
B8 7D890408 # mov_eax, &f_process_file
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
58 # pop_eax # ;
E9 45000000 # jmp %_main_else_end11
#:_main_else11
## hex2.c 318
50 # push_eax # input_files (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # output_byte (function)
B8 BA9A0408 # mov_eax, &f_output_byte
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # process_file (function)
B8 7D890408 # mov_eax, &f_process_file
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
58 # pop_eax # ;
#:_main_else_end11
50 # push_eax # i (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 07FFFFFF # jmp %_main_loop9
#:_main_loop_end9
## hex2.c 320
50 # push_eax # output_file (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 5F000000 # je %_main_else12
## hex2.c 321
## hex2.c 22
50 # push_eax # 6
B8 06000000 # mov_eax, %6
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 40000000 # add_ebp, %64 # ()
FFD0 # call_eax
81ED 40000000 # sub_ebp, %64
58 # pop_eax # ;
## hex2.c 25
50 # push_eax # 15
B8 0F000000 # mov_eax, %15
50 # push_eax # output_file (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
50 # push_eax # 511
B8 FF010000 # mov_eax, %511
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 89800408 # mov_eax, &f_sys_int80
81C5 40000000 # add_ebp, %64 # ()
FFD0 # call_eax
81ED 40000000 # sub_ebp, %64
58 # pop_eax # ;
## hex2.c 326
#:_main_else12 # no else
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:f___init_globals__
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # _sys_env (global)
B8 18A10408 # mov_eax, &g__sys_env
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # ip (global)
B8 1CA10408 # mov_eax, &g_ip
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # labels (global)
B8 20A10408 # mov_eax, &g_labels
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # col (global)
B8 24A10408 # mov_eax, &g_col
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # fout (global)
B8 28A10408 # mov_eax, &g_fout
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
#:ELF_data
#
00000000 #:SYS_MALLOC NULL
2D6F00 #:string_0 "-o"
2E6865783000 #:string_1 ".hex0"
#:g__sys_env
00000000 # NULL
#:g_ip
00000000 # NULL
#:g_labels
00000000 # NULL
#:g_col
00000000 # NULL
#:g_fout
00000000 # NULL
#:static_0_line
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000# NULL NULL NULL NULL NULL NULL NULL NULL
00000000 00000000 # NULL NULL
#
#:ELF_end
# Generated sections
00 # NULL
2E7465787400
2E736873747274616200
2E73796D74616200
2E73747274616200
00000000 #sh_name
00000000 #sh_type
00000000 #sh_flags
00000000 #sh_addr
00000000 #sh_offset
00000000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
01000000 #sh_name
01000000 #sh_type
06000000 #sh_flags
54800408 #sh_addr
54000000 #sh_offset
B7200000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
07000000 #sh_name
03000000 #sh_type
00000000 #sh_flags
14A50408 #sh_addr
14250000 #sh_offset
21000000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
19000000 #sh_name
03000000 #sh_type
00000000 #sh_flags
FDA50408 #sh_addr
FD250000 #sh_offset
E00A0000 #sh_size
00000000 #sh_link
00000000 #sh_info
01000000 #sh_addralign
00000000 #sh_entsize
11000000 #sh_name
02000000 #sh_type
00000000 #sh_flags
DDB00408 #sh_addr
DD300000 #sh_offset
90090000 #sh_size
03000000 #sh_link
99000000 #sh_info
01000000 #sh_addralign
10000000 #sh_entsize
# Generated string table
00 # NULL string
454C465F7465787400 # "ELF_text"
5F737461727400 # "_start"
665F7379735F696E74383000 # "f_sys_int80"
665F7379735F6D616C6C6F6300 # "f_sys_malloc"
5359535F4D414C4C4F4300 # "SYS_MALLOC"
665F6D616C6C6F6300 # "f_malloc"
665F737472636D7000 # "f_strcmp"
5F737472636D705F6C6F6F703100# "_strcmp_loop1"
5F737472636D705F6F725F656E643200# "_strcmp_or_end2"
5F737472636D705F656C73653300# "_strcmp_else3"
5F737472636D705F6C6F6F705F656E643100# "_strcmp_loop_end1"
665F7374726E636D7000 # "f_strncmp"
5F7374726E636D705F6C6F6F703100# "_strncmp_loop1"
5F7374726E636D705F656C73653200# "_strncmp_else2"
5F7374726E636D705F6F725F656E643300# "_strncmp_or_end3"
5F7374726E636D705F656C73653400# "_strncmp_else4"
5F7374726E636D705F6C6F6F705F656E643100# "_strncmp_loop_end1"
665F7374726C656E00 # "f_strlen"
5F7374726C656E5F6C6F6F703100# "_strlen_loop1"
5F7374726C656E5F656C73653200# "_strlen_else2"
5F7374726C656E5F6C6F6F705F656E643100# "_strlen_loop_end1"
665F7374726E63707900 # "f_strncpy"
5F7374726E6370795F6C6F6F703100# "_strncpy_loop1"
5F7374726E6370795F656C73653200# "_strncpy_else2"
5F7374726E6370795F656C73653300# "_strncpy_else3"
5F7374726E6370795F6C6F6F705F656E643100# "_strncpy_loop_end1"
665F66687075746300 # "f_fhputc"
665F66686765747300 # "f_fhgets"
5F6668676574735F6C6F6F703100# "_fhgets_loop1"
5F6668676574735F656C73653200# "_fhgets_else2"
5F6668676574735F656C73653400# "_fhgets_else4"
5F6668676574735F656C73653300# "_fhgets_else3"
5F6668676574735F656C73653500# "_fhgets_else5"
5F6668676574735F6C6F6F705F656E643100# "_fhgets_loop_end1"
665F69735F68657800 # "f_is_hex"
5F69735F6865785F616E645F656E643100# "_is_hex_and_end1"
5F69735F6865785F656C73653200# "_is_hex_else2"
5F69735F6865785F616E645F656E643300# "_is_hex_and_end3"
5F69735F6865785F656C73653400# "_is_hex_else4"
665F706F735F666F725F6C6162656C00# "f_pos_for_label"
5F706F735F666F725F6C6162656C5F6C6F6F703100# "_pos_for_label_loop1"
5F706F735F666F725F6C6162656C5F656C73653200# "_pos_for_label_else2"
5F706F735F666F725F6C6162656C5F616E645F656E643300# "_pos_for_label_and_end3"
5F706F735F666F725F6C6162656C5F656C73653400# "_pos_for_label_else4"
5F706F735F666F725F6C6162656C5F6C6F6F705F656E643100# "_pos_for_label_loop_end1"
665F70726F636573735F66696C6500# "f_process_file"
5F70726F636573735F66696C655F656C73653100# "_process_file_else1"
5F70726F636573735F66696C655F6C6F6F703200# "_process_file_loop2"
5F70726F636573735F66696C655F656C73653300# "_process_file_else3"
5F70726F636573735F66696C655F6C6F6F703400# "_process_file_loop4"
5F70726F636573735F66696C655F616E645F656E643500# "_process_file_and_end5"
5F70726F636573735F66696C655F616E645F656E643600# "_process_file_and_end6"
5F70726F636573735F66696C655F616E645F656E643700# "_process_file_and_end7"
5F70726F636573735F66696C655F656C73653800# "_process_file_else8"
5F70726F636573735F66696C655F656C73653900# "_process_file_else9"
5F70726F636573735F66696C655F6C6F6F70313100# "_process_file_loop11"
5F70726F636573735F66696C655F656C7365313200# "_process_file_else12"
5F70726F636573735F66696C655F6C6F6F705F656E64313100# "_process_file_loop_end11"
5F70726F636573735F66696C655F616E645F656E64313300# "_process_file_and_end13"
5F70726F636573735F66696C655F656C7365313400# "_process_file_else14"
5F70726F636573735F66696C655F656C7365313000# "_process_file_else10"
5F70726F636573735F66696C655F616E645F656E64313500# "_process_file_and_end15"
5F70726F636573735F66696C655F656C7365313700# "_process_file_else17"
5F70726F636573735F66696C655F656C7365313600# "_process_file_else16"
5F70726F636573735F66696C655F6F725F656E64313800# "_process_file_or_end18"
5F70726F636573735F66696C655F6F725F656E64313900# "_process_file_or_end19"
5F70726F636573735F66696C655F6C6F6F70323100# "_process_file_loop21"
5F70726F636573735F66696C655F616E645F656E64323200# "_process_file_and_end22"
5F70726F636573735F66696C655F616E645F656E64323300# "_process_file_and_end23"
5F70726F636573735F66696C655F656C7365323400# "_process_file_else24"
5F70726F636573735F66696C655F6C6F6F705F656E64323100# "_process_file_loop_end21"
5F70726F636573735F66696C655F6C6F6F70323700# "_process_file_loop27"
5F70726F636573735F66696C655F616E645F656E64323800# "_process_file_and_end28"
5F70726F636573735F66696C655F656C7365323900# "_process_file_else29"
5F70726F636573735F66696C655F6C6F6F705F656E64323700# "_process_file_loop_end27"
5F70726F636573735F66696C655F656C7365323600# "_process_file_else26"
5F70726F636573735F66696C655F656C73655F656E64323600# "_process_file_else_end26"
5F70726F636573735F66696C655F656C7365323500# "_process_file_else25"
5F70726F636573735F66696C655F656C7365333000# "_process_file_else30"
5F70726F636573735F66696C655F656C73655F656E64333000# "_process_file_else_end30"
5F70726F636573735F66696C655F6C6F6F70333100# "_process_file_loop31"
5F70726F636573735F66696C655F656C7365333200# "_process_file_else32"
5F70726F636573735F66696C655F656C7365333300# "_process_file_else33"
5F70726F636573735F66696C655F6C6F6F705F656E64333100# "_process_file_loop_end31"
5F70726F636573735F66696C655F656C7365323000# "_process_file_else20"
5F70726F636573735F66696C655F6C6F6F70333500# "_process_file_loop35"
5F70726F636573735F66696C655F616E645F656E64333600# "_process_file_and_end36"
5F70726F636573735F66696C655F656C7365333700# "_process_file_else37"
5F70726F636573735F66696C655F656C7365333800# "_process_file_else38"
5F70726F636573735F66696C655F6C6F6F705F656E64333500# "_process_file_loop_end35"
5F70726F636573735F66696C655F656C7365333900# "_process_file_else39"
5F70726F636573735F66696C655F656C7365343000# "_process_file_else40"
5F70726F636573735F66696C655F656C7365333400# "_process_file_else34"
5F70726F636573735F66696C655F656C73655F656E64333400# "_process_file_else_end34"
5F70726F636573735F66696C655F656C73655F656E64323000# "_process_file_else_end20"
5F70726F636573735F66696C655F656C73655F656E64313600# "_process_file_else_end16"
5F70726F636573735F66696C655F656C73655F656E64313000# "_process_file_else_end10"
5F70726F636573735F66696C655F656C73655F656E643900# "_process_file_else_end9"
5F70726F636573735F66696C655F6C6F6F705F656E643400# "_process_file_loop_end4"
5F70726F636573735F66696C655F6C6F6F70343100# "_process_file_loop41"
5F70726F636573735F66696C655F616E645F656E64343200# "_process_file_and_end42"
5F70726F636573735F66696C655F616E645F656E64343300# "_process_file_and_end43"
5F70726F636573735F66696C655F616E645F656E64343400# "_process_file_and_end44"
5F70726F636573735F66696C655F656C7365343500# "_process_file_else45"
5F70726F636573735F66696C655F6C6F6F705F656E64343100# "_process_file_loop_end41"
5F70726F636573735F66696C655F656C7365343600# "_process_file_else46"
5F70726F636573735F66696C655F6C6F6F705F656E643200# "_process_file_loop_end2"
665F6F75747075745F68657800 # "f_output_hex"
5F6F75747075745F6865785F656C73653100# "_output_hex_else1"
5F6F75747075745F6865785F656C73655F656E643100# "_output_hex_else_end1"
665F6F75747075745F6865785F6279746500# "f_output_hex_byte"
5F6F75747075745F6865785F627974655F656C73653100# "_output_hex_byte_else1"
665F6F75747075745F6865785F656E645F6F665F6C696E6500# "f_output_hex_end_of_line"
5F6F75747075745F6865785F656E645F6F665F6C696E655F6C6F6F703100# "_output_hex_end_of_line_loop1"
5F6F75747075745F6865785F656E645F6F665F6C696E655F656C73653200# "_output_hex_end_of_line_else2"
5F6F75747075745F6865785F656E645F6F665F6C696E655F6C6F6F705F656E643100# "_output_hex_end_of_line_loop_end1"
5F6F75747075745F6865785F656E645F6F665F6C696E655F6C6F6F703300# "_output_hex_end_of_line_loop3"
5F6F75747075745F6865785F656E645F6F665F6C696E655F616E645F656E643400# "_output_hex_end_of_line_and_end4"
5F6F75747075745F6865785F656E645F6F665F6C696E655F616E645F656E643500# "_output_hex_end_of_line_and_end5"
5F6F75747075745F6865785F656E645F6F665F6C696E655F656C73653600# "_output_hex_end_of_line_else6"
5F6F75747075745F6865785F656E645F6F665F6C696E655F6C6F6F705F656E643300# "_output_hex_end_of_line_loop_end3"
665F6F75747075745F6279746500# "f_output_byte"
665F6D61696E00 # "f_main"
5F6D61696E5F6C6F6F703100 # "_main_loop1"
5F6D61696E5F656C73653200 # "_main_else2"
5F6D61696E5F656C73653300 # "_main_else3"
5F6D61696E5F656C73655F656E643300# "_main_else_end3"
5F6D61696E5F6C6F6F705F656E643100# "_main_loop_end1"
5F6D61696E5F656C73653500 # "_main_else5"
5F6D61696E5F616E645F656E643600# "_main_and_end6"
5F6D61696E5F656C73653400 # "_main_else4"
5F6D61696E5F6C6F6F703700 # "_main_loop7"
5F6D61696E5F656C73653800 # "_main_else8"
5F6D61696E5F6C6F6F705F656E643700# "_main_loop_end7"
5F6D61696E5F6C6F6F703900 # "_main_loop9"
5F6D61696E5F656C7365313000 # "_main_else10"
5F6D61696E5F656C7365313100 # "_main_else11"
5F6D61696E5F656C73655F656E64313100# "_main_else_end11"
5F6D61696E5F6C6F6F705F656E643900# "_main_loop_end9"
5F6D61696E5F656C7365313200 # "_main_else12"
665F5F5F696E69745F676C6F62616C735F5F00# "f___init_globals__"
454C465F6461746100 # "ELF_data"
5359535F4D414C4C4F4300 # "SYS_MALLOC"
737472696E675F3000 # "string_0"
737472696E675F3100 # "string_1"
675F5F7379735F656E7600 # "g__sys_env"
675F697000 # "g_ip"
675F6C6162656C7300 # "g_labels"
675F636F6C00 # "g_col"
675F666F757400 # "g_fout"
7374617469635F305F6C696E6500# "static_0_line"
454C465F656E6400 # "ELF_end"
# END Generated string table
# Generated symbol table
# Required NULL symbol entry
00000000 # st_name
00000000 # st_value
00000000 # st_size
00 # st_info
00 # st_other
0100 # st_shndx
01000000 # st_name
54800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
0A000000 # st_name
54800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
11000000 # st_name
89800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
1D000000 # st_name
92800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
870A0000 # st_name
0BA10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
35000000 # st_name
B5800408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
3E000000 # st_name
06810408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
47000000 # st_name
21810408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
55000000 # st_name
94810408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
65000000 # st_name
AB810408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
73000000 # st_name
F4810408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
85000000 # st_name
0A820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
8F000000 # st_name
30820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
9E000000 # st_name
5E820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
AD000000 # st_name
D1820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
BE000000 # st_name
E8820408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
CD000000 # st_name
53830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
E0000000 # st_name
69830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
E9000000 # st_name
8A830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
F7000000 # st_name
C0830408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
05010000 # st_name
09840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
17010000 # st_name
22840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
21010000 # st_name
81840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
30010000 # st_name
B2840408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
3F010000 # st_name
22850408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
4E010000 # st_name
49850408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
61010000 # st_name
54850408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
6A010000 # st_name
AB850408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
73010000 # st_name
E2850408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
81010000 # st_name
1E860408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
8F010000 # st_name
92860408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
9D010000 # st_name
97860408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
AB010000 # st_name
03870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
B9010000 # st_name
08870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
CB010000 # st_name
3D870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
D4010000 # st_name
92870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
E5010000 # st_name
BA870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
F3010000 # st_name
FF870408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
04020000 # st_name
32880408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
12020000 # st_name
48880408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
22020000 # st_name
76880408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
37020000 # st_name
A4880408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
4C020000 # st_name
27890408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
64020000 # st_name
46890408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
79020000 # st_name
67890408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
92020000 # st_name
7D890408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
A1020000 # st_name
148A0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
B5020000 # st_name
258A0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
C9020000 # st_name
648A0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
DD020000 # st_name
A88A0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
F1020000 # st_name
F18A0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
08030000 # st_name
1A8B0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
1F030000 # st_name
438B0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
36030000 # st_name
598B0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
4A030000 # st_name
BA8B0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
5E030000 # st_name
2A8C0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
73030000 # st_name
608C0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
88030000 # st_name
A98C0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
A1030000 # st_name
D38C0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
B9030000 # st_name
BB8D0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
CE030000 # st_name
C08D0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
E3030000 # st_name
3A8E0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
FB030000 # st_name
FA8E0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
10040000 # st_name
488F0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
25040000 # st_name
918F0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
3C040000 # st_name
BA8F0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
53040000 # st_name
08900408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
68040000 # st_name
69900408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
80040000 # st_name
9E900408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
98040000 # st_name
B4900408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
AD040000 # st_name
DB900408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
C6040000 # st_name
BF910408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
DB040000 # st_name
20920408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
F3040000 # st_name
36920408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
08050000 # st_name
5D920408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
21050000 # st_name
B5920408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
36050000 # st_name
D0920408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
4F050000 # st_name
D0920408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
64050000 # st_name
0B930408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
79050000 # st_name
11930408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
92050000 # st_name
26930408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
A7050000 # st_name
57930408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
BC050000 # st_name
CD930408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
D1050000 # st_name
FA930408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
EA050000 # st_name
FF930408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
FF050000 # st_name
4A940408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
14060000 # st_name
93940408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
2C060000 # st_name
A9940408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
41060000 # st_name
FC940408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
56060000 # st_name
55950408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
6F060000 # st_name
A0950408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
84060000 # st_name
E8950408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
99060000 # st_name
1F960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
AE060000 # st_name
2A960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
C7060000 # st_name
2A960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
E0060000 # st_name
2A960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
F9060000 # st_name
2A960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
12070000 # st_name
2A960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
2A070000 # st_name
2F960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
42070000 # st_name
2F960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
57070000 # st_name
78960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
6F070000 # st_name
A1960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
87070000 # st_name
CA960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
9F070000 # st_name
E0960408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
B4070000 # st_name
07970408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
CD070000 # st_name
49970408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
E2070000 # st_name
4E970408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
FA070000 # st_name
89970408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
07080000 # st_name
E5970408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
19080000 # st_name
F6970408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
2F080000 # st_name
22980408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
41080000 # st_name
93980408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
58080000 # st_name
23990408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
71080000 # st_name
33990408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
8F080000 # st_name
60990408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
AD080000 # st_name
A9990408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
CF080000 # st_name
A9990408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
ED080000 # st_name
F2990408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
0E090000 # st_name
1B9A0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
2F090000 # st_name
319A0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
4D090000 # st_name
7C9A0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
6F090000 # st_name
BA9A0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
7D090000 # st_name
139B0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
84090000 # st_name
C79B0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
90090000 # st_name
F89B0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
9C090000 # st_name
9C9C0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
A8090000 # st_name
F49C0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
B8090000 # st_name
1B9D0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
C8090000 # st_name
A09D0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
D4090000 # st_name
399E0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
E3090000 # st_name
3D9E0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
EF090000 # st_name
5E9E0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
FB090000 # st_name
8F9E0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
070A0000 # st_name
FB9E0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
170A0000 # st_name
1C9F0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
230A0000 # st_name
4D9F0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
300A0000 # st_name
A99F0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
3D0A0000 # st_name
EE9F0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
4E0A0000 # st_name
15A00408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
5E0A0000 # st_name
95A00408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
02 # st_other (hidden)
0100 # st_shndx
6B0A0000 # st_name
ABA00408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
7E0A0000 # st_name
0BA10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
870A0000 # st_name
0BA10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
920A0000 # st_name
0FA10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
9B0A0000 # st_name
12A10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
A40A0000 # st_name
18A10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
AF0A0000 # st_name
1CA10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
B40A0000 # st_name
20A10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
BD0A0000 # st_name
24A10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
C30A0000 # st_name
28A10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
CA0A0000 # st_name
2CA10408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
D80A0000 # st_name
6DBA0408 #st_value
00000000 # st_size (unknown size)
02 # st_info (FUNC)
00 # st_other (default)
0100 # st_shndx
# END Generated symbol table
### Copyright (C) 2016 Jeremiah Orians ### Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org> ### This file is part of M2-Planet. ### ### M2-Planet is free software: you can redistribute it and/or modify ### it under the terms of the GNU General Public License as published by ### the Free Software Foundation, either version 3 of the License, or ### (at your option) any later version. ### ### M2-Planet is distributed in the hope that it will be useful, ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### GNU General Public License for more details. ### ### You should have received a copy of the GNU General Public License ### along with M2-Planet. If not, see <http://www.gnu.org/licenses/>. ### stage0's hex2 format ### !<label> 1 byte relative ### $<label> 2 byte address ### @<label> 2 byte relative ### &<label> 4 byte address ### %<label> 4 byte relative ### if you wish to use this header, you need to add :ELF_end to the end of your ### M1 or hex2 files. ## ELF Header :ELF_base 7F 45 4C 46 # e_ident[EI_MAG0-3] ELF's magic number 01 # e_ident[EI_CLASS] Indicating 32 bit 01 # e_ident[EI_DATA] Indicating little endianness 01 # e_ident[EI_VERSION] Indicating original elf 03 # e_ident[EI_OSABI] Set at 3 because FreeBSD is strict 00 # e_ident[EI_ABIVERSION] See above 00 00 00 00 00 00 00 # e_ident[EI_PAD] 02 00 # e_type Indicating Executable 03 00 # e_machine Indicating 386 01 00 00 00 # e_version Indicating original elf &_start # e_entry Address of the entry point %ELF_program_headers>ELF_base # e_phoff Address of program header table %ELF_section_headers>ELF_base # e_shoff Address of section header table 00 00 00 00 # e_flags 34 00 # e_ehsize Indicating our 52 Byte header 20 00 # e_phentsize size of a program header table 01 00 # e_phnum number of entries in program table 28 00 # e_shentsize size of a section header table 05 00 # e_shnum number of entries in section table 02 00 # e_shstrndx index of the section names :ELF_program_headers :ELF_program_header__text 01 00 00 00 # ph_type: PT-LOAD = 1 00 00 00 00 # ph_offset &ELF_base # ph_vaddr &ELF_base # ph_physaddr %ELF_end>ELF_base # ph_filesz %ELF_end>ELF_base # ph_memsz 07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7 01 00 00 00 # ph_alignment :ELF_text
#
:ELF_text #:ELF_text
#
:_start #:_start
B8 2D000000 # mov_eax, %45 # the Syscall # for SYS_BRK
BB 00000000 # mov_ebx, %0 # Get current brk
CD80 # int_80 # Let the kernel do the work
A3 &SYS_MALLOC # mov_[DWORD],eax &SYS_MALLOC # Set our malloc pointer
#
# # allocate memory for the second stack
B8 A0860100 # mov_eax, %100000
50 # push_eax # (sys_malloc assums address)
E8 %f_sys_malloc # call %f_sys_malloc
89C5 # mov_ebp,eax
#
# # setup argc and argv for the main function
89C2 # mov_edx,eax
58 # pop_eax
89E3 # mov_ebx,esp
50 # push_eax
53 # push_ebx
89D0 # mov_eax,edx
#
# #call main
E8 %f_main # call %f_main
#
# # program completed Successfully
89C3 # mov_ebx,eax # All is well
B8 01000000 # mov_eax, %1 # put the exit syscall number in eax
CD80 # int_80 # Call it a good day
#
## These sys_ function follow the same calling conventions
## as all the other functions. To access the arguments on the stack
## the return address is stored in the edi address (which is only possible
## because these functions do not call other function) and the function
## address (which is stored in the eax register, the top of the stack)
## needs to be popped as well.
#
:f_sys_int80 #:f_sys_int80
5F # pop_edi # Save return address from the stack
5A # pop_edx # Get the arguments from the stack
59 # pop_ecx
5B # pop_ebx
58 # pop_eax
CD80 # int_80 # call the Kernel
57 # push_edi # restore return address to the stack
C3 # ret
#
:f_sys_malloc #:f_sys_malloc
5F # pop_edi
58 # pop_eax
8B1D &SYS_MALLOC # mov_ebx,[DWORD] &SYS_MALLOC # Using the current pointer
01C3 # add_ebx,eax # Request the number of desired bytes
B8 2D000000 # mov_eax, %45 # the Syscall # for SYS_BRK
CD80 # int_80 # call the Kernel
8B05 &SYS_MALLOC # mov_eax,[DWORD] &SYS_MALLOC # Return pointer
891D &SYS_MALLOC # mov_[DWORD],ebx &SYS_MALLOC # Update pointer
57 # push_edi
C3 # ret
:SYS_MALLOC #:SYS_MALLOC
00000000 # NULL
#
#
#
:f_exit #:f_exit
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # result (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 8
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # result (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_memcpy #:f_memcpy
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 34
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_memcpy_loop1 #:_memcpy_loop1
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_memcpy_else2 # je %_memcpy_else2
E9 %_memcpy_loop_end1 # jmp %_memcpy_loop_end1
## stdlib.c 35
:_memcpy_else2 #:_memcpy_else2 # no else
50 # push_eax # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_memcpy_loop1 # jmp %_memcpy_loop1
:_memcpy_loop_end1 #:_memcpy_loop_end1
## stdlib.c 36
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_memmove #:f_memmove
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 43
50 # push_eax # 1
B8 01000000 # mov_eax, %1
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_memmove_else1 # je %_memmove_else1
## stdlib.c 44
## stdlib.c 45
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_memmove_loop2 #:_memmove_loop2
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <
39C3 # cmp_eax_ebx
0F92C0 # setb_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_memmove_else3 # je %_memmove_else3
E9 %_memmove_loop_end2 # jmp %_memmove_loop_end2
## stdlib.c 46
:_memmove_else3 #:_memmove_else3 # no else
50 # push_eax # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_memmove_loop2 # jmp %_memmove_loop2
:_memmove_loop_end2 #:_memmove_loop_end2
E9 %_memmove_else_end1 # jmp %_memmove_else_end1
:_memmove_else1 #:_memmove_else1
## stdlib.c 48
50 # push_eax # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <
39C3 # cmp_eax_ebx
0F92C0 # setb_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_memmove_else4 # je %_memmove_else4
## stdlib.c 49
50 # push_eax # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 51
50 # push_eax # i (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_memmove_loop5 #:_memmove_loop5
50 # push_eax # i (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <
39C3 # cmp_eax_ebx
0F92C0 # setb_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_memmove_else6 # je %_memmove_else6
E9 %_memmove_loop_end5 # jmp %_memmove_loop_end5
## stdlib.c 52
:_memmove_else6 #:_memmove_else6 # no else
50 # push_eax # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # j (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
58 # pop_eax # ;
E9 %_memmove_loop5 # jmp %_memmove_loop5
:_memmove_loop_end5 #:_memmove_loop_end5
:_memmove_else4 #:_memmove_else4 # no else
:_memmove_else_end1 #:_memmove_else_end1
## stdlib.c 54
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_memset #:f_memset
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 60
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_memset_loop1 #:_memset_loop1
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <
39C3 # cmp_eax_ebx
0F92C0 # setb_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_memset_else2 # je %_memset_else2
E9 %_memset_loop_end1 # jmp %_memset_loop_end1
## stdlib.c 61
:_memset_else2 #:_memset_else2 # no else
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_memset_loop1 # jmp %_memset_loop1
:_memset_loop_end1 #:_memset_loop_end1
## stdlib.c 62
50 # push_eax # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_memcmp #:f_memcmp
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # p1 (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # p2 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 69
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_memcmp_loop1 #:_memcmp_loop1
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <
39C3 # cmp_eax_ebx
0F92C0 # setb_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_memcmp_else2 # je %_memcmp_else2
E9 %_memcmp_loop_end1 # jmp %_memcmp_loop_end1
## stdlib.c 70
:_memcmp_else2 #:_memcmp_else2 # no else
50 # push_eax # result (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # p1 (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # p2 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 72
50 # push_eax # result (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_memcmp_else3 # je %_memcmp_else3
## stdlib.c 73
50 # push_eax # result (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:_memcmp_else3 #:_memcmp_else3 # no else
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # p1 (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # p2 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_memcmp_loop1 # jmp %_memcmp_loop1
:_memcmp_loop_end1 #:_memcmp_loop_end1
## stdlib.c 75
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strlen #:f_strlen
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 81
:_strlen_loop1 #:_strlen_loop1
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strlen_else2 # je %_strlen_else2
E9 %_strlen_loop_end1 # jmp %_strlen_loop_end1
## stdlib.c 82
:_strlen_else2 #:_strlen_else2 # no else
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_strlen_loop1 # jmp %_strlen_loop1
:_strlen_loop_end1 #:_strlen_loop_end1
## stdlib.c 83
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strcpy #:f_strcpy
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 89
:_strcpy_loop1 #:_strcpy_loop1
50 # push_eax # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strcpy_else2 # je %_strcpy_else2
E9 %_strcpy_loop_end1 # jmp %_strcpy_loop_end1
## stdlib.c 90
:_strcpy_else2 #:_strcpy_else2 # no else
50 # push_eax # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
50 # push_eax # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
E9 %_strcpy_loop1 # jmp %_strcpy_loop1
:_strcpy_loop_end1 #:_strcpy_loop_end1
## stdlib.c 91
50 # push_eax # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 92
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strncpy #:f_strncpy
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # src (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 99
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_strncpy_loop1 #:_strncpy_loop1
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strncpy_else2 # je %_strncpy_else2
E9 %_strncpy_loop_end1 # jmp %_strncpy_loop_end1
## stdlib.c 100
## stdlib.c 101
:_strncpy_else2 #:_strncpy_else2 # no else
50 # push_eax # d (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 102
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strncpy_else3 # je %_strncpy_else3
## stdlib.c 103
E9 %_strncpy_loop_end1 # jmp %_strncpy_loop_end1
:_strncpy_else3 #:_strncpy_else3 # no else
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_strncpy_loop1 # jmp %_strncpy_loop1
:_strncpy_loop_end1 #:_strncpy_loop_end1
## stdlib.c 105
50 # push_eax # dest (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strcat #:f_strcat
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 110
50 # push_eax # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # strlen (function)
B8 &f_strlen # mov_eax, &f_strlen
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # src (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # strcpy (function)
B8 &f_strcpy # mov_eax, &f_strcpy
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## stdlib.c 111
50 # push_eax # dest (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strchr #:f_strchr
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 116
:_strchr_loop1 #:_strchr_loop1
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strchr_else2 # je %_strchr_else2
E9 %_strchr_loop_end1 # jmp %_strchr_loop_end1
## stdlib.c 117
:_strchr_else2 #:_strchr_else2 # no else
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strchr_else3 # je %_strchr_else3
## stdlib.c 118
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:_strchr_else3 #:_strchr_else3 # no else
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_strchr_loop1 # jmp %_strchr_loop1
:_strchr_loop_end1 #:_strchr_loop_end1
## stdlib.c 119
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strchr_else4 # je %_strchr_else4
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
E9 %_strchr_else_end4 # jmp %_strchr_else_end4
:_strchr_else4 #:_strchr_else4
50 # push_eax # 0
B8 00000000 # mov_eax, %0
:_strchr_else_end4 #:_strchr_else_end4
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strrchr #:f_strrchr
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # strlen (function)
B8 &f_strlen # mov_eax, &f_strlen
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 125
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_strrchr_loop1 #:_strrchr_loop1
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >=sfv
39C3 # cmp_eax_ebx
0F9DC0 # setge_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strrchr_else2 # je %_strrchr_else2
E9 %_strrchr_loop_end1 # jmp %_strrchr_loop_end1
## stdlib.c 126
:_strrchr_else2 #:_strrchr_else2 # no else
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strrchr_else3 # je %_strrchr_else3
## stdlib.c 127
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:_strrchr_else3 #:_strrchr_else3 # no else
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
58 # pop_eax # ;
E9 %_strrchr_loop1 # jmp %_strrchr_loop1
:_strrchr_loop_end1 #:_strrchr_loop_end1
## stdlib.c 128
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strcmp #:f_strcmp
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 133
:_strcmp_loop1 #:_strcmp_loop1
## stdlib.c 134
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 136
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 %_strcmp_or_end2 # jne %_strcmp_or_end2
58 # pop_eax
50 # push_eax # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_strcmp_or_end2 #:_strcmp_or_end2
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strcmp_else3 # je %_strcmp_else3
## stdlib.c 137
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## stdlib.c 138
:_strcmp_else3 #:_strcmp_else3 # no else
50 # push_eax # s1 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 139
50 # push_eax # s2 (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_strcmp_loop1 # jmp %_strcmp_loop1
:_strcmp_loop_end1 #:_strcmp_loop_end1
## stdlib.c 141
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strncmp #:f_strncmp
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 146
:_strncmp_loop1 #:_strncmp_loop1
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >
39C3 # cmp_eax_ebx
0F97C0 # seta_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strncmp_else2 # je %_strncmp_else2
E9 %_strncmp_loop_end1 # jmp %_strncmp_loop_end1
## stdlib.c 147
:_strncmp_else2 #:_strncmp_else2 # no else
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 149
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 %_strncmp_or_end3 # jne %_strncmp_or_end3
58 # pop_eax
50 # push_eax # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_strncmp_or_end3 #:_strncmp_or_end3
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strncmp_else4 # je %_strncmp_else4
## stdlib.c 150
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## stdlib.c 151
:_strncmp_else4 #:_strncmp_else4 # no else
50 # push_eax # s1 (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 152
50 # push_eax # s2 (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # n (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
58 # pop_eax # ;
E9 %_strncmp_loop1 # jmp %_strncmp_loop1
:_strncmp_loop_end1 #:_strncmp_loop_end1
## stdlib.c 154
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strstr #:f_strstr
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # needle (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # needle (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # strlen (function)
B8 &f_strlen # mov_eax, &f_strlen
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 160
:_strstr_loop1 #:_strstr_loop1
50 # push_eax # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strstr_else2 # je %_strstr_else2
E9 %_strstr_loop_end1 # jmp %_strstr_loop_end1
## stdlib.c 161
:_strstr_else2 #:_strstr_else2 # no else
50 # push_eax # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # needle (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # n (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # strncmp (function)
B8 &f_strncmp # mov_eax, &f_strncmp
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strstr_else3 # je %_strstr_else3
## stdlib.c 162
50 # push_eax # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:_strstr_else3 #:_strstr_else3 # no else
50 # push_eax # haystack (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_strstr_loop1 # jmp %_strstr_loop1
:_strstr_loop_end1 #:_strstr_loop_end1
## stdlib.c 163
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strtoul #:f_strtoul
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 169
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoul_else1 # je %_strtoul_else1
## stdlib.c 170
## stdlib.c 171
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 172
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 48
B8 30000000 # mov_eax, %48
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoul_else2 # je %_strtoul_else2
## stdlib.c 173
## stdlib.c 174
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # 8
B8 08000000 # mov_eax, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 175
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 176
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 120
B8 78000000 # mov_eax, %120
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 %_strtoul_or_end3 # jne %_strtoul_or_end3
58 # pop_eax
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 88
B8 58000000 # mov_eax, %88
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_strtoul_or_end3 #:_strtoul_or_end3
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoul_else4 # je %_strtoul_else4
## stdlib.c 177
## stdlib.c 178
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # 16
B8 10000000 # mov_eax, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 179
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
:_strtoul_else4 #:_strtoul_else4 # no else
:_strtoul_else2 #:_strtoul_else2 # no else
:_strtoul_else1 #:_strtoul_else1 # no else
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # sub_10 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoul_else5 # je %_strtoul_else5
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
E9 %_strtoul_else_end5 # jmp %_strtoul_else_end5
:_strtoul_else5 #:_strtoul_else5
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
:_strtoul_else_end5 #:_strtoul_else_end5
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 185
:_strtoul_loop6 #:_strtoul_loop6
## stdlib.c 186
## stdlib.c 187
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_strtoul_and_end7 # je %_strtoul_and_end7
58 # pop_eax
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # sub_10 (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
:_strtoul_and_end7 #:_strtoul_and_end7
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoul_else8 # je %_strtoul_else8
## stdlib.c 188
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 48
B8 30000000 # mov_eax, %48
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_strtoul_else_end8 # jmp %_strtoul_else_end8
:_strtoul_else8 #:_strtoul_else8
## stdlib.c 189
50 # push_eax # 97
B8 61000000 # mov_eax, %97
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_strtoul_and_end9 # je %_strtoul_and_end9
58 # pop_eax
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 97
B8 61000000 # mov_eax, %97
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
:_strtoul_and_end9 #:_strtoul_and_end9
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoul_else10 # je %_strtoul_else10
## stdlib.c 190
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 97
B8 61000000 # mov_eax, %97
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_strtoul_else_end10 # jmp %_strtoul_else_end10
:_strtoul_else10 #:_strtoul_else10
## stdlib.c 191
50 # push_eax # 65
B8 41000000 # mov_eax, %65
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_strtoul_and_end11 # je %_strtoul_and_end11
58 # pop_eax
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 65
B8 41000000 # mov_eax, %65
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
:_strtoul_and_end11 #:_strtoul_and_end11
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoul_else12 # je %_strtoul_else12
## stdlib.c 192
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 65
B8 41000000 # mov_eax, %65
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_strtoul_else_end12 # jmp %_strtoul_else_end12
:_strtoul_else12 #:_strtoul_else12
## stdlib.c 194
E9 %_strtoul_loop_end6 # jmp %_strtoul_loop_end6
:_strtoul_else_end12 #:_strtoul_else_end12
:_strtoul_else_end10 #:_strtoul_else_end10
:_strtoul_else_end8 #:_strtoul_else_end8
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_strtoul_loop6 # jmp %_strtoul_loop6
:_strtoul_loop_end6 #:_strtoul_loop_end6
## stdlib.c 196
50 # push_eax # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoul_else13 # je %_strtoul_else13
## stdlib.c 197
50 # push_eax # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 198
:_strtoul_else13 #:_strtoul_else13 # no else
50 # push_eax # result (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strtol #:f_strtol
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # sign (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 204
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 45
B8 2D000000 # mov_eax, %45
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtol_else1 # je %_strtol_else1
## stdlib.c 205
## stdlib.c 206
50 # push_eax # sign (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 207
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 209
:_strtol_else1 #:_strtol_else1 # no else
50 # push_eax # sign (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # strtoul (function)
B8 &f_strtoul # mov_eax, &f_strtoul
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
5B # pop_ebx # *
F7E3 # mul_ebx
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strtoll #:f_strtoll
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 214
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # strtol (function)
B8 &f_strtol # mov_eax, &f_strtol
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strtoull #:f_strtoull
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 219
50 # push_eax # nptr (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # endptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # base (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # strtoul (function)
B8 &f_strtoul # mov_eax, &f_strtoul
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strtof #:f_strtof
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # endptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # str (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 225
50 # push_eax # endptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # str (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 226
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_malloc #:f_malloc
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 231
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 3
B8 03000000 # mov_eax, %3
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 3
B8 03000000 # mov_eax, %3
F7D0 # not_eax # ~
5B # pop_ebx # &
21D8 # and_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # sys_malloc (function)
B8 &f_sys_malloc # mov_eax, &f_sys_malloc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 233
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 234
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 235
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_realloc #:f_realloc
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # ptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # malloc (function)
B8 &f_malloc # mov_eax, &f_malloc
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 241
50 # push_eax # ptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_realloc_else1 # je %_realloc_else1
## stdlib.c 242
50 # push_eax # old_ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # ptr (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # old_size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # old_ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
89C3 # mov_ebx,eax # /s
58 # pop_eax
99 # cdq
F7FB # idiv_ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 245
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_realloc_loop2 #:_realloc_loop2
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # old_size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_realloc_else3 # je %_realloc_else3
E9 %_realloc_loop_end2 # jmp %_realloc_loop_end2
## stdlib.c 246
:_realloc_else3 #:_realloc_else3 # no else
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # old_ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_realloc_loop2 # jmp %_realloc_loop2
:_realloc_loop_end2 #:_realloc_loop_end2
## stdlib.c 248
:_realloc_else1 #:_realloc_else1 # no else
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_calloc #:f_calloc
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # S (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # N (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # N (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # S (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # r (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # malloc (function)
B8 &f_malloc # mov_eax, &f_malloc
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 255
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_calloc_loop1 #:_calloc_loop1
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_calloc_else2 # je %_calloc_else2
E9 %_calloc_loop_end1 # jmp %_calloc_loop_end1
## stdlib.c 256
:_calloc_else2 #:_calloc_else2 # no else
50 # push_eax # r (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_calloc_loop1 # jmp %_calloc_loop1
:_calloc_loop_end1 #:_calloc_loop_end1
## stdlib.c 257
50 # push_eax # r (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_free #:f_free
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # ptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 263
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fwrite #:f_fwrite
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 268
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fputc #:f_fputc
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 273
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fputs #:f_fputs
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 278
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # strlen (function)
B8 &f_strlen # mov_eax, &f_strlen
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f___sys_printf #:f___sys_printf
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # stream (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # cnt (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # org_format (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 292
:___sys_printf_loop1 #:___sys_printf_loop1
## stdlib.c 293
## stdlib.c 294
50 # push_eax # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else2 # je %___sys_printf_else2
## stdlib.c 295
E9 %___sys_printf_loop_end1 # jmp %___sys_printf_loop_end1
## stdlib.c 296
:___sys_printf_else2 #:___sys_printf_else2 # no else
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else3 # je %___sys_printf_else3
## stdlib.c 297
## stdlib.c 298
50 # push_eax # stream (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else4 # je %___sys_printf_else4
## stdlib.c 299
50 # push_eax # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # stream (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 3C000000 # add_ebp, %60 # ()
FFD0 # call_eax
81ED 3C000000 # sub_ebp, %60
58 # pop_eax # ;
E9 %___sys_printf_else_end4 # jmp %___sys_printf_else_end4
:___sys_printf_else4 #:___sys_printf_else4
## stdlib.c 300
50 # push_eax # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else5 # je %___sys_printf_else5
## stdlib.c 301
50 # push_eax # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
50 # push_eax # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
:___sys_printf_else5 #:___sys_printf_else5 # no else
:___sys_printf_else_end4 #:___sys_printf_else_end4
## stdlib.c 302
50 # push_eax # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 303
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
58 # pop_eax # ;
## stdlib.c 304
50 # push_eax # cnt (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 305
50 # push_eax # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else6 # je %___sys_printf_else6
## stdlib.c 306
50 # push_eax # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
58 # pop_eax # ;
:___sys_printf_else6 #:___sys_printf_else6 # no else
## stdlib.c 308
:___sys_printf_else3 #:___sys_printf_else3 # no else
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else7 # je %___sys_printf_else7
## stdlib.c 309
## stdlib.c 310
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else8 # je %___sys_printf_else8
## stdlib.c 311
E9 %___sys_printf_loop_end1 # jmp %___sys_printf_loop_end1
## stdlib.c 312
:___sys_printf_else8 #:___sys_printf_else8 # no else
50 # push_eax # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 313
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 314
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 37
B8 25000000 # mov_eax, %37
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else9 # je %___sys_printf_else9
## stdlib.c 315
## stdlib.c 316
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 317
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 37
B8 25000000 # mov_eax, %37
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else10 # je %___sys_printf_else10
## stdlib.c 318
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 37
B8 25000000 # mov_eax, %37
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
E9 %___sys_printf_else_end10 # jmp %___sys_printf_else_end10
:___sys_printf_else10 #:___sys_printf_else10
## stdlib.c 320
50 # push_eax # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # sign (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 323
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 45
B8 2D000000 # mov_eax, %45
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else11 # je %___sys_printf_else11
## stdlib.c 324
## stdlib.c 325
50 # push_eax # sign (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 326
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 328
:___sys_printf_else11 #:___sys_printf_else11 # no else
:___sys_printf_loop12 #:___sys_printf_loop12
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %___sys_printf_and_end13 # je %___sys_printf_and_end13
58 # pop_eax
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 57
B8 39000000 # mov_eax, %57
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
:___sys_printf_and_end13 #:___sys_printf_and_end13
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else14 # je %___sys_printf_else14
E9 %___sys_printf_loop_end12 # jmp %___sys_printf_loop_end12
## stdlib.c 329
## stdlib.c 330
:___sys_printf_else14 #:___sys_printf_else14 # no else
50 # push_eax # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 48
B8 30000000 # mov_eax, %48
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 331
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %___sys_printf_loop12 # jmp %___sys_printf_loop12
:___sys_printf_loop_end12 #:___sys_printf_loop_end12
## stdlib.c 333
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 115
B8 73000000 # mov_eax, %115
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else15 # je %___sys_printf_else15
## stdlib.c 334
## stdlib.c 335
50 # push_eax # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50 # push_eax # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 336
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
8B00 # mov_eax,[eax] # ?
50 # push_eax # strlen (function)
B8 &f_strlen # mov_eax, &f_strlen
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %___sys_printf_else_end15 # jmp %___sys_printf_else_end15
:___sys_printf_else15 #:___sys_printf_else15
## stdlib.c 338
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 100
B8 64000000 # mov_eax, %100
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else16 # je %___sys_printf_else16
## stdlib.c 339
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50 # push_eax # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50 # push_eax # 20
B8 14000000 # mov_eax, %20
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 342
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else17 # je %___sys_printf_else17
## stdlib.c 343
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 48
B8 30000000 # mov_eax, %48
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
E9 %___sys_printf_else_end17 # jmp %___sys_printf_else_end17
:___sys_printf_else17 #:___sys_printf_else17
## stdlib.c 345
## stdlib.c 346
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else18 # je %___sys_printf_else18
## stdlib.c 346
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 347
:___sys_printf_else18 #:___sys_printf_else18 # no else
:___sys_printf_loop19 #:___sys_printf_loop19
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else20 # je %___sys_printf_else20
E9 %___sys_printf_loop_end19 # jmp %___sys_printf_loop_end19
## stdlib.c 348
:___sys_printf_else20 #:___sys_printf_else20 # no else
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
89C3 # mov_ebx,eax # %s
58 # pop_eax
99 # cdq
F7FB # idiv_ebx
89D0 5B # mov_eax,edx pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
89C3 # mov_ebx,eax # /s
58 # pop_eax
99 # cdq
F7FB # idiv_ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %___sys_printf_loop19 # jmp %___sys_printf_loop19
:___sys_printf_loop_end19 #:___sys_printf_loop_end19
## stdlib.c 349
50 # push_eax # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else21 # je %___sys_printf_else21
## stdlib.c 350
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 45
B8 2D000000 # mov_eax, %45
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
:___sys_printf_else21 #:___sys_printf_else21 # no else
:___sys_printf_else_end17 #:___sys_printf_else_end17
## stdlib.c 352
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # 20
B8 14000000 # mov_eax, %20
50 # push_eax # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 353
50 # push_eax # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else22 # je %___sys_printf_else22
## stdlib.c 354
## stdlib.c 355
50 # push_eax # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else23 # je %___sys_printf_else23
## stdlib.c 356
## stdlib.c 357
50 # push_eax # sign (local)
8D85 40000000 # lea_eax,[ebp+DWORD] %64
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else24 # je %___sys_printf_else24
## stdlib.c 358
## stdlib.c 359
50 # push_eax # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50 # push_eax # 20
B8 14000000 # mov_eax, %20
50 # push_eax # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:___sys_printf_loop25 #:___sys_printf_loop25
50 # push_eax # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00 # mov_eax,[eax] # ?
50 # push_eax # 20
B8 14000000 # mov_eax, %20
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else26 # je %___sys_printf_else26
E9 %___sys_printf_loop_end25 # jmp %___sys_printf_loop_end25
## stdlib.c 360
:___sys_printf_else26 #:___sys_printf_else26 # no else
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00 # mov_eax,[eax] # ?
50 # push_eax # 20
B8 14000000 # mov_eax, %20
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else27 # je %___sys_printf_else27
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
E9 %___sys_printf_else_end27 # jmp %___sys_printf_else_end27
:___sys_printf_else27 #:___sys_printf_else27
50 # push_eax # 32
B8 20000000 # mov_eax, %32
:___sys_printf_else_end27 #:___sys_printf_else_end27
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 4C000000 # lea_eax,[ebp+DWORD] %76
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %___sys_printf_loop25 # jmp %___sys_printf_loop25
:___sys_printf_loop_end25 #:___sys_printf_loop_end25
## stdlib.c 361
50 # push_eax # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50 # push_eax # 20
B8 14000000 # mov_eax, %20
50 # push_eax # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %___sys_printf_else_end24 # jmp %___sys_printf_else_end24
:___sys_printf_else24 #:___sys_printf_else24
## stdlib.c 364
:___sys_printf_loop28 #:___sys_printf_loop28
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
50 # push_eax # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else29 # je %___sys_printf_else29
E9 %___sys_printf_loop_end28 # jmp %___sys_printf_loop_end28
## stdlib.c 365
:___sys_printf_else29 #:___sys_printf_else29 # no else
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %___sys_printf_loop28 # jmp %___sys_printf_loop28
:___sys_printf_loop_end28 #:___sys_printf_loop_end28
:___sys_printf_else_end24 #:___sys_printf_else_end24
## stdlib.c 367
:___sys_printf_else23 #:___sys_printf_else23 # no else
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # modifier (local)
8D85 3C000000 # lea_eax,[ebp+DWORD] %60
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 369
:___sys_printf_else22 #:___sys_printf_else22 # no else
50 # push_eax # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # b (local)
8D85 48000000 # lea_eax,[ebp+DWORD] %72
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 370
50 # push_eax # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %___sys_printf_else_end16 # jmp %___sys_printf_else_end16
:___sys_printf_else16 #:___sys_printf_else16
## stdlib.c 372
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 117
B8 75000000 # mov_eax, %117
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else30 # je %___sys_printf_else30
## stdlib.c 373
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50 # push_eax # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 375
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else31 # je %___sys_printf_else31
## stdlib.c 376
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 48
B8 30000000 # mov_eax, %48
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
E9 %___sys_printf_else_end31 # jmp %___sys_printf_else_end31
:___sys_printf_else31 #:___sys_printf_else31
## stdlib.c 378
## stdlib.c 379
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # 20
B8 14000000 # mov_eax, %20
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 380
:___sys_printf_loop32 #:___sys_printf_loop32
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >
39C3 # cmp_eax_ebx
0F97C0 # seta_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else33 # je %___sys_printf_else33
E9 %___sys_printf_loop_end32 # jmp %___sys_printf_loop_end32
## stdlib.c 381
:___sys_printf_else33 #:___sys_printf_else33 # no else
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
89C3 # mov_ebx,eax # %
58 # pop_eax
BA 00000000 # mov_edx, %0
F7F3 # div_ebx
89D0 # mov_eax,edx
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
89C3 # mov_ebx,eax # /
58 # pop_eax
BA 00000000 # mov_edx, %0
F7F3 # div_ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %___sys_printf_loop32 # jmp %___sys_printf_loop32
:___sys_printf_loop_end32 #:___sys_printf_loop_end32
## stdlib.c 382
50 # push_eax # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 383
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # 20
B8 14000000 # mov_eax, %20
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:___sys_printf_else_end31 #:___sys_printf_else_end31
E9 %___sys_printf_else_end30 # jmp %___sys_printf_else_end30
:___sys_printf_else30 #:___sys_printf_else30
## stdlib.c 386
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 120
B8 78000000 # mov_eax, %120
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 %___sys_printf_or_end34 # jne %___sys_printf_or_end34
58 # pop_eax
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 112
B8 70000000 # mov_eax, %112
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:___sys_printf_or_end34 #:___sys_printf_or_end34
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else35 # je %___sys_printf_else35
## stdlib.c 387
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50 # push_eax # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 389
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else36 # je %___sys_printf_else36
## stdlib.c 390
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 48
B8 30000000 # mov_eax, %48
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
E9 %___sys_printf_else_end36 # jmp %___sys_printf_else_end36
:___sys_printf_else36 #:___sys_printf_else36
## stdlib.c 392
## stdlib.c 393
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # 20
B8 14000000 # mov_eax, %20
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 394
:___sys_printf_loop37 #:___sys_printf_loop37
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else38 # je %___sys_printf_else38
E9 %___sys_printf_loop_end37 # jmp %___sys_printf_loop_end37
## stdlib.c 395
:___sys_printf_else38 #:___sys_printf_else38 # no else
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 15
B8 0F000000 # mov_eax, %15
5B # pop_ebx # &
21D8 # and_eax,ebx
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # <
39C3 # cmp_eax_ebx
0F92C0 # setb_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else39 # je %___sys_printf_else39
50 # push_eax # 48
B8 30000000 # mov_eax, %48
E9 %___sys_printf_else_end39 # jmp %___sys_printf_else_end39
:___sys_printf_else39 #:___sys_printf_else39
50 # push_eax # 97
B8 61000000 # mov_eax, %97
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
:___sys_printf_else_end39 #:___sys_printf_else_end39
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
8B00 # mov_eax,[eax] # ?
50 # push_eax # 15
B8 0F000000 # mov_eax, %15
5B # pop_ebx # &
21D8 # and_eax,ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # v (local)
8D85 44000000 # lea_eax,[ebp+DWORD] %68
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
89C1 # mov_ecx,eax # >>
58 # pop_eax
D3E8 # shr_eax,cl
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %___sys_printf_loop37 # jmp %___sys_printf_loop37
:___sys_printf_loop_end37 #:___sys_printf_loop_end37
## stdlib.c 396
50 # push_eax # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 397
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # 20
B8 14000000 # mov_eax, %20
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:___sys_printf_else_end36 #:___sys_printf_else_end36
E9 %___sys_printf_else_end35 # jmp %___sys_printf_else_end35
:___sys_printf_else35 #:___sys_printf_else35
## stdlib.c 400
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 99
B8 63000000 # mov_eax, %99
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else40 # je %___sys_printf_else40
## stdlib.c 401
## stdlib.c 402
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
E9 %___sys_printf_else_end40 # jmp %___sys_printf_else_end40
:___sys_printf_else40 #:___sys_printf_else40
## stdlib.c 405
## stdlib.c 406
50 # push_eax # '__sys_printf %'
B8 &string_0 # mov_eax, &string_0
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
58 # pop_eax # ;
## stdlib.c 407
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
58 # pop_eax # ;
## stdlib.c 408
50 # push_eax # ' '
B8 &string_1 # mov_eax, &string_1
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
58 # pop_eax # ;
## stdlib.c 409
50 # push_eax # org_format (local)
8D85 38000000 # lea_eax,[ebp+DWORD] %56
8B00 # mov_eax,[eax] # ?
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
58 # pop_eax # ;
## stdlib.c 410
50 # push_eax # '\n'
B8 &string_2 # mov_eax, &string_2
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
58 # pop_eax # ;
## stdlib.c 411
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 44000000 # add_ebp, %68 # ()
FFD0 # call_eax
81ED 44000000 # sub_ebp, %68
58 # pop_eax # ;
:___sys_printf_else_end40 #:___sys_printf_else_end40
:___sys_printf_else_end35 #:___sys_printf_else_end35
:___sys_printf_else_end30 #:___sys_printf_else_end30
:___sys_printf_else_end16 #:___sys_printf_else_end16
:___sys_printf_else_end15 #:___sys_printf_else_end15
:___sys_printf_else_end10 #:___sys_printf_else_end10
E9 %___sys_printf_else_end9 # jmp %___sys_printf_else_end9
:___sys_printf_else9 #:___sys_printf_else9
## stdlib.c 416
## stdlib.c 417
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 418
50 # push_eax # s (local)
8D85 30000000 # lea_eax,[ebp+DWORD] %48
50 # push_eax # buffer (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 419
50 # push_eax # l (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:___sys_printf_else_end9 #:___sys_printf_else_end9
## stdlib.c 421
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
:___sys_printf_else7 #:___sys_printf_else7 # no else
E9 %___sys_printf_loop1 # jmp %___sys_printf_loop1
:___sys_printf_loop_end1 #:___sys_printf_loop_end1
## stdlib.c 424
50 # push_eax # len (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %___sys_printf_and_end41 # je %___sys_printf_and_end41
58 # pop_eax
50 # push_eax # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
:___sys_printf_and_end41 #:___sys_printf_and_end41
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___sys_printf_else42 # je %___sys_printf_else42
## stdlib.c 425
50 # push_eax # trg (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 426
:___sys_printf_else42 #:___sys_printf_else42 # no else
50 # push_eax # cnt (local)
8D85 34000000 # lea_eax,[ebp+DWORD] %52
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_va_end #:f_va_end
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # ap (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fprintf #:f_fprintf
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 435
50 # push_eax # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 436
50 # push_eax # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # __sys_printf (function)
B8 &f___sys_printf # mov_eax, &f___sys_printf
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_printf #:f_printf
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 442
50 # push_eax # ap (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 443
50 # push_eax # stdout (global)
B8 &g_stdout # mov_eax, &g_stdout
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # ap (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # __sys_printf (function)
B8 &f___sys_printf # mov_eax, &f___sys_printf
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_sprintf #:f_sprintf
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 449
50 # push_eax # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 450
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # __sys_printf (function)
B8 &f___sys_printf # mov_eax, &f___sys_printf
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_snprintf #:f_snprintf
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 455
50 # push_eax # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 456
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # __sys_printf (function)
B8 &f___sys_printf # mov_eax, &f___sys_printf
81C5 18000000 # add_ebp, %24 # ()
FFD0 # call_eax
81ED 18000000 # sub_ebp, %24
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_vsnprintf #:f_vsnprintf
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # ap (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 461
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # str (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # ap (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # __sys_printf (function)
B8 &f___sys_printf # mov_eax, &f___sys_printf
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_open #:f_open
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # flag (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # filename (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # mode (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 477
50 # push_eax # flag (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # &
21D8 # and_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_open_else1 # je %_open_else1
## stdlib.c 478
## stdlib.c 480
50 # push_eax # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 481
50 # push_eax # mode (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # ap (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 483
:_open_else1 #:_open_else1 # no else
50 # push_eax # 5
B8 05000000 # mov_eax, %5
50 # push_eax # filename (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # flag (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # mode (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_close #:f_close
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # fd (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 488
50 # push_eax # 6
B8 06000000 # mov_eax, %6
50 # push_eax # fd (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_read #:f_read
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 493
50 # push_eax # 3
B8 03000000 # mov_eax, %3
50 # push_eax # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_lseek #:f_lseek
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 498
50 # push_eax # 19
B8 13000000 # mov_eax, %19
50 # push_eax # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fopen #:f_fopen
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # rw (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 504
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 114
B8 72000000 # mov_eax, %114
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 %_fopen_or_end1 # jne %_fopen_or_end1
58 # pop_eax
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 119
B8 77000000 # mov_eax, %119
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_fopen_or_end1 #:_fopen_or_end1
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fopen_else2 # je %_fopen_else2
## stdlib.c 505
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
:_fopen_else2 #:_fopen_else2 # no else
50 # push_eax # bin (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 507
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 98
B8 62000000 # mov_eax, %98
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fopen_else3 # je %_fopen_else3
## stdlib.c 508
## stdlib.c 509
50 # push_eax # bin (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 510
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
:_fopen_else3 #:_fopen_else3 # no else
50 # push_eax # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 513
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 43
B8 2B000000 # mov_eax, %43
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fopen_else4 # je %_fopen_else4
## stdlib.c 514
## stdlib.c 515
50 # push_eax # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 516
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 518
:_fopen_else4 #:_fopen_else4 # no else
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fopen_else5 # je %_fopen_else5
## stdlib.c 519
## stdlib.c 520
50 # push_eax # 'Mode %s should be 'r/w(b)(+)', 'w', or 'wb'\n'
B8 &string_3 # mov_eax, &string_3
50 # push_eax # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # printf (function)
B8 &f_printf # mov_eax, &f_printf
81C5 1C000000 # add_ebp, %28 # ()
FFD0 # call_eax
81ED 1C000000 # sub_ebp, %28
58 # pop_eax # ;
## stdlib.c 521
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:_fopen_else5 #:_fopen_else5 # no else
50 # push_eax # open_mode (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # rw (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 114
B8 72000000 # mov_eax, %114
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fopen_else6 # je %_fopen_else6
50 # push_eax # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fopen_else7 # je %_fopen_else7
50 # push_eax # 2
B8 02000000 # mov_eax, %2
E9 %_fopen_else_end7 # jmp %_fopen_else_end7
:_fopen_else7 #:_fopen_else7
50 # push_eax # 0
B8 00000000 # mov_eax, %0
:_fopen_else_end7 #:_fopen_else_end7
E9 %_fopen_else_end6 # jmp %_fopen_else_end6
:_fopen_else6 #:_fopen_else6
50 # push_eax # plus (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fopen_else8 # je %_fopen_else8
50 # push_eax # 2
B8 02000000 # mov_eax, %2
E9 %_fopen_else_end8 # jmp %_fopen_else_end8
:_fopen_else8 #:_fopen_else8
50 # push_eax # 1
B8 01000000 # mov_eax, %1
:_fopen_else_end8 #:_fopen_else_end8
50 # push_eax # 64
B8 40000000 # mov_eax, %64
5B # pop_ebx # |
09D8 # or_eax,ebx
50 # push_eax # 512
B8 00020000 # mov_eax, %512
5B # pop_ebx # |
09D8 # or_eax,ebx
:_fopen_else_end6 #:_fopen_else_end6
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 5
B8 05000000 # mov_eax, %5
50 # push_eax # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # open_mode (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # 511
B8 FF010000 # mov_eax, %511
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 528
50 # push_eax # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fopen_else9 # je %_fopen_else9
## stdlib.c 529
## stdlib.c 530
50 # push_eax # 'fopen %s %s returned %d\n'
B8 &string_4 # mov_eax, &string_4
50 # push_eax # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # 8
B8 08000000 # mov_eax, %8
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # __var_args (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # printf (function)
B8 &f_printf # mov_eax, &f_printf
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## stdlib.c 531
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:_fopen_else9 #:_fopen_else9 # no else
50 # push_eax # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # 8
B8 08000000 # mov_eax, %8
50 # push_eax # malloc (function)
B8 &f_malloc # mov_eax, &f_malloc
81C5 24000000 # add_ebp, %36 # ()
FFD0 # call_eax
81ED 24000000 # sub_ebp, %36
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 534
50 # push_eax # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
50 # push_eax # fh (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 535
50 # push_eax # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 536
50 # push_eax # f (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fdopen #:f_fdopen
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # fd (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # 8
B8 08000000 # mov_eax, %8
50 # push_eax # malloc (function)
B8 &f_malloc # mov_eax, &f_malloc
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 542
50 # push_eax # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
50 # push_eax # fd (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 543
50 # push_eax # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 544
50 # push_eax # f (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fclose #:f_fclose
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 549
50 # push_eax # 6
B8 06000000 # mov_eax, %6
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fflush #:f_fflush
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 555
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fseek #:f_fseek
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 560
50 # push_eax # stream (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # lseek (function)
B8 &f_lseek # mov_eax, &f_lseek
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_ftell #:f_ftell
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 565
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # lseek (function)
B8 &f_lseek # mov_eax, &f_lseek
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fread #:f_fread
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # ptr (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 571
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_fread_loop1 #:_fread_loop1
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fread_else2 # je %_fread_else2
E9 %_fread_loop_end1 # jmp %_fread_loop_end1
## stdlib.c 572
:_fread_else2 #:_fread_else2 # no else
50 # push_eax # r (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # read (function)
B8 &f_read # mov_eax, &f_read
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 574
50 # push_eax # r (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <
39C3 # cmp_eax_ebx
0F92C0 # setb_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fread_else3 # je %_fread_else3
## stdlib.c 575
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## stdlib.c 576
:_fread_else3 #:_fread_else3 # no else
50 # push_eax # s (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_fread_loop1 # jmp %_fread_loop1
:_fread_loop_end1 #:_fread_loop_end1
## stdlib.c 578
50 # push_eax # nmemb (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_lseek #:f_lseek
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 587
50 # push_eax # 19
B8 13000000 # mov_eax, %19
50 # push_eax # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # offset (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # whence (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_feof #:f_feof
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 592
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fgetc #:f_fgetc
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 597
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fgetc_else1 # je %_fgetc_else1
## stdlib.c 598
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:_fgetc_else1 #:_fgetc_else1 # no else
50 # push_eax # ret (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # 3
B8 03000000 # mov_eax, %3
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 601
50 # push_eax # ret (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fgetc_else2 # je %_fgetc_else2
## stdlib.c 602
## stdlib.c 603
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 604
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## stdlib.c 606
:_fgetc_else2 #:_fgetc_else2 # no else
50 # push_eax # ch (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_ldexp #:f_ldexp
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # exp (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # x (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # x (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 613
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_ldexp_loop1 #:_ldexp_loop1
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # exp (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_ldexp_else2 # je %_ldexp_else2
E9 %_ldexp_loop_end1 # jmp %_ldexp_loop_end1
## stdlib.c 614
:_ldexp_else2 #:_ldexp_else2 # no else
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # x (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_ldexp_loop1 # jmp %_ldexp_loop1
:_ldexp_loop_end1 #:_ldexp_loop_end1
## stdlib.c 615
50 # push_eax # result (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_time #:f_time
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # tloc (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 621
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'TODO time\n'
B8 &string_5 # mov_eax, &string_5
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## stdlib.c 621
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_localtime #:f_localtime
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # timep (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 638
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'TODO localtime\n'
B8 &string_6 # mov_eax, &string_6
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## stdlib.c 638
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_gettimeofday #:f_gettimeofday
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # tz (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # tv (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 651
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_write #:f_write
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 667
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # fd (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # count (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fileno #:f_fileno
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 672
50 # push_eax # stream (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_getcwd #:f_getcwd
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 681
50 # push_eax # 183
B8 B7000000 # mov_eax, %183
50 # push_eax # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## stdlib.c 682
50 # push_eax # buf (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_getenv #:f_getenv
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # strlen (function)
B8 &f_strlen # mov_eax, &f_strlen
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 690
50 # push_eax # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # _sys_env (global)
B8 &g__sys_env # mov_eax, &g__sys_env
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_getenv_loop1 #:_getenv_loop1
50 # push_eax # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_getenv_else2 # je %_getenv_else2
E9 %_getenv_loop_end1 # jmp %_getenv_loop_end1
## stdlib.c 691
:_getenv_else2 #:_getenv_else2 # no else
50 # push_eax # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B00 # mov_eax,[eax] # ?
50 # push_eax # name (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # strncmp (function)
B8 &f_strncmp # mov_eax, &f_strncmp
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_getenv_and_end3 # je %_getenv_and_end3
58 # pop_eax
50 # push_eax # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B00 # mov_eax,[eax] # ?
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 61
B8 3D000000 # mov_eax, %61
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_getenv_and_end3 #:_getenv_and_end3
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_getenv_else4 # je %_getenv_else4
## stdlib.c 692
50 # push_eax # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B00 # mov_eax,[eax] # ?
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:_getenv_else4 #:_getenv_else4 # no else
50 # push_eax # env (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_getenv_loop1 # jmp %_getenv_loop1
:_getenv_loop_end1 #:_getenv_loop_end1
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_qsort #:f_qsort
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # compar (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # nmemb (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # base (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 698
50 # push_eax # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_qsort_loop1 #:_qsort_loop1
50 # push_eax # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_qsort_else2 # je %_qsort_else2
E9 %_qsort_loop_end1 # jmp %_qsort_loop_end1
## stdlib.c 699
## stdlib.c 700
:_qsort_else2 #:_qsort_else2 # no else
50 # push_eax # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 701
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_qsort_loop3 #:_qsort_loop3
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # nmemb (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_qsort_else4 # je %_qsort_else4
E9 %_qsort_loop_end3 # jmp %_qsort_loop_end3
## stdlib.c 702
:_qsort_else4 #:_qsort_else4 # no else
50 # push_eax # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # base (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # base (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # sign (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # compar (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 706
50 # push_eax # sign (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_qsort_else5 # je %_qsort_else5
## stdlib.c 707
## stdlib.c 708
50 # push_eax # go (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 709
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_qsort_loop6 #:_qsort_loop6
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_qsort_else7 # je %_qsort_else7
E9 %_qsort_loop_end6 # jmp %_qsort_loop_end6
## stdlib.c 710
:_qsort_else7 #:_qsort_else7 # no else
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
50 # push_eax # 3
B8 03000000 # mov_eax, %3
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # size (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_qsort_else8 # je %_qsort_else8
## stdlib.c 711
50 # push_eax # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 714
50 # push_eax # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 715
50 # push_eax # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 716
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 3
B8 03000000 # mov_eax, %3
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_qsort_else_end8 # jmp %_qsort_else_end8
:_qsort_else8 #:_qsort_else8
## stdlib.c 719
50 # push_eax # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
50 # push_eax # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 722
50 # push_eax # arg1 (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 723
50 # push_eax # arg2 (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # h (local)
8D85 2C000000 # lea_eax,[ebp+DWORD] %44
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
:_qsort_else_end8 #:_qsort_else_end8
50 # push_eax # j (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_qsort_loop6 # jmp %_qsort_loop6
:_qsort_loop_end6 #:_qsort_loop_end6
:_qsort_else5 #:_qsort_else5 # no else
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_qsort_loop3 # jmp %_qsort_loop3
:_qsort_loop_end3 #:_qsort_loop_end3
E9 %_qsort_loop1 # jmp %_qsort_loop1
:_qsort_loop_end1 #:_qsort_loop_end1
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_time #:f_time
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # tloc (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 733
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'TODO time\n'
B8 &string_5 # mov_eax, &string_5
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## stdlib.c 733
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_setjmp #:f_setjmp
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # env (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 739
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'TODO setjmp\n'
B8 &string_7 # mov_eax, &string_7
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## stdlib.c 739
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## stdlib.c 740
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_longjmp #:f_longjmp
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # val (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # env (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 746
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'TODO longjmp\n'
B8 &string_8 # mov_eax, &string_8
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## stdlib.c 746
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## stdlib.c 747
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_unlink #:f_unlink
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 752
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_sscanf #:f_sscanf
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 758
50 # push_eax # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # __var_args (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # args_parsed (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 762
:_sscanf_loop1 #:_sscanf_loop1
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_sscanf_else2 # je %_sscanf_else2
E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1
## stdlib.c 763
:_sscanf_else2 #:_sscanf_else2 # no else
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_sscanf_else3 # je %_sscanf_else3
## stdlib.c 764
E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1
E9 %_sscanf_else_end3 # jmp %_sscanf_else_end3
:_sscanf_else3 #:_sscanf_else3
## stdlib.c 765
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 37
B8 25000000 # mov_eax, %37
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_sscanf_else4 # je %_sscanf_else4
## stdlib.c 766
## stdlib.c 767
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 768
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 100
B8 64000000 # mov_eax, %100
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_sscanf_else5 # je %_sscanf_else5
## stdlib.c 769
## stdlib.c 770
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
50 # push_eax # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 772
:_sscanf_loop6 #:_sscanf_loop6
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_sscanf_and_end7 # je %_sscanf_and_end7
58 # pop_eax
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 57
B8 39000000 # mov_eax, %57
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
:_sscanf_and_end7 #:_sscanf_and_end7
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_sscanf_else8 # je %_sscanf_else8
E9 %_sscanf_loop_end6 # jmp %_sscanf_loop_end6
## stdlib.c 773
## stdlib.c 774
:_sscanf_else8 #:_sscanf_else8 # no else
50 # push_eax # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 48
B8 30000000 # mov_eax, %48
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 775
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_sscanf_loop6 # jmp %_sscanf_loop6
:_sscanf_loop_end6 #:_sscanf_loop_end6
## stdlib.c 777
50 # push_eax # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
8B00 # mov_eax,[eax] # ?
50 # push_eax # v (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 778
50 # push_eax # ap (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 779
50 # push_eax # args_parsed (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_sscanf_else_end5 # jmp %_sscanf_else_end5
:_sscanf_else5 #:_sscanf_else5
## stdlib.c 782
## stdlib.c 783
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'sscanf: format %%%c not supported\n'
B8 &string_9 # mov_eax, &string_9
50 # push_eax # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # __var_args (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 1C000000 # add_ebp, %28 # ()
FFD0 # call_eax
81ED 1C000000 # sub_ebp, %28
58 # pop_eax # ;
## stdlib.c 784
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 18000000 # add_ebp, %24 # ()
FFD0 # call_eax
81ED 18000000 # sub_ebp, %24
58 # pop_eax # ;
:_sscanf_else_end5 #:_sscanf_else_end5
E9 %_sscanf_else_end4 # jmp %_sscanf_else_end4
:_sscanf_else4 #:_sscanf_else4
## stdlib.c 788
## stdlib.c 789
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_sscanf_else9 # je %_sscanf_else9
## stdlib.c 790
E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1
## stdlib.c 791
:_sscanf_else9 #:_sscanf_else9 # no else
50 # push_eax # format (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
## stdlib.c 792
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
:_sscanf_else_end4 #:_sscanf_else_end4
:_sscanf_else_end3 #:_sscanf_else_end3
E9 %_sscanf_loop1 # jmp %_sscanf_loop1
:_sscanf_loop_end1 #:_sscanf_loop_end1
## stdlib.c 794
50 # push_eax # args_parsed (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_atoi #:f_atoi
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # nptr (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 800
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'TODO atoi\n'
B8 &string_10 # mov_eax, &string_10
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## stdlib.c 800
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_remove #:f_remove
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 805
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # pathname (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_execvp #:f_execvp
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 811
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'TODO execvp\n'
B8 &string_11 # mov_eax, &string_11
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # fprintf (function)
B8 &f_fprintf # mov_eax, &f_fprintf
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## stdlib.c 811
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_mkdir #:f_mkdir
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 816
50 # push_eax # 39
B8 27000000 # mov_eax, %39
50 # push_eax # pathname (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_chdir #:f_chdir
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # path (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 821
50 # push_eax # 12
B8 0C000000 # mov_eax, %12
50 # push_eax # path (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_access #:f_access
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 826
50 # push_eax # 33
B8 21000000 # mov_eax, %33
50 # push_eax # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_chmod #:f_chmod
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 831
50 # push_eax # 15
B8 0F000000 # mov_eax, %15
50 # push_eax # filename (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # mode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_symlink #:f_symlink
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # linkpath (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # target (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 836
50 # push_eax # 83
B8 53000000 # mov_eax, %83
50 # push_eax # target (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # linkpath (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_uname #:f_uname
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # buf (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 854
50 # push_eax # 109
B8 6D000000 # mov_eax, %109
50 # push_eax # buf (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_execve #:f_execve
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # env (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # argv (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # program (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 859
50 # push_eax # 11
B8 0B000000 # mov_eax, %11
50 # push_eax # program (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # argv (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # env (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # sys_int80 (function)
B8 &f_sys_int80 # mov_eax, &f_sys_int80
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_fgets #:f_fgets
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## stdlib.c 864
50 # push_eax # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # feof (function)
B8 &f_feof # mov_eax, &f_feof
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fgets_else1 # je %_fgets_else1
## stdlib.c 865
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## stdlib.c 867
:_fgets_else1 #:_fgets_else1 # no else
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_fgets_loop2 #:_fgets_loop2
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # len (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fgets_else3 # je %_fgets_else3
E9 %_fgets_loop_end2 # jmp %_fgets_loop_end2
## stdlib.c 868
:_fgets_else3 #:_fgets_else3 # no else
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # f (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # fgetc (function)
B8 &f_fgetc # mov_eax, &f_fgetc
81C5 18000000 # add_ebp, %24 # ()
FFD0 # call_eax
81ED 18000000 # sub_ebp, %24
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## stdlib.c 870
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fgets_else4 # je %_fgets_else4
## stdlib.c 871
## stdlib.c 872
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 873
E9 %_fgets_loop_end2 # jmp %_fgets_loop_end2
## stdlib.c 875
:_fgets_else4 #:_fgets_else4 # no else
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 876
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_fgets_else5 # je %_fgets_else5
## stdlib.c 877
## stdlib.c 878
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## stdlib.c 879
E9 %_fgets_loop_end2 # jmp %_fgets_loop_end2
:_fgets_else5 #:_fgets_else5 # no else
50 # push_eax # i (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_fgets_loop2 # jmp %_fgets_loop2
:_fgets_loop_end2 #:_fgets_loop_end2
## stdlib.c 882
50 # push_eax # str (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_require #:f_require
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # error (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # bool (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## bootstrappable.c 27
50 # push_eax # bool (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_require_else1 # je %_require_else1
## bootstrappable.c 28
## bootstrappable.c 29
50 # push_eax # error (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## bootstrappable.c 30
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
:_require_else1 #:_require_else1 # no else
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_match #:f_match
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # b (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # a (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## bootstrappable.c 37
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # a (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_match_and_end1 # je %_match_and_end1
58 # pop_eax
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # b (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_match_and_end1 #:_match_and_end1
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_match_else2 # je %_match_else2
## bootstrappable.c 37
50 # push_eax # 1
B8 01000000 # mov_eax, %1
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## bootstrappable.c 38
:_match_else2 #:_match_else2 # no else
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # a (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_match_else3 # je %_match_else3
## bootstrappable.c 38
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## bootstrappable.c 39
:_match_else3 #:_match_else3 # no else
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # b (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_match_else4 # je %_match_else4
## bootstrappable.c 39
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:_match_else4 #:_match_else4 # no else
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 42
:_match_loop5 #:_match_loop5
## bootstrappable.c 43
## bootstrappable.c 44
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 45
50 # push_eax # a (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # b (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_match_else6 # je %_match_else6
## bootstrappable.c 46
## bootstrappable.c 47
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:_match_else6 #:_match_else6 # no else
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # a (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_match_and_end7 # je %_match_and_end7
58 # pop_eax
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # b (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
:_match_and_end7 #:_match_and_end7
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_match_else8 # je %_match_else8
E9 %_match_loop_end5 # jmp %_match_loop_end5
:_match_else8 #:_match_else8 # no else
E9 %_match_loop5 # jmp %_match_loop5
:_match_loop_end5 #:_match_loop_end5
## bootstrappable.c 50
50 # push_eax # 1
B8 01000000 # mov_eax, %1
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_in_set #:f_in_set
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## bootstrappable.c 57
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_in_set_else1 # je %_in_set_else1
## bootstrappable.c 57
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## bootstrappable.c 59
:_in_set_else1 #:_in_set_else1 # no else
:_in_set_loop2 #:_in_set_loop2
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_in_set_else3 # je %_in_set_else3
E9 %_in_set_loop_end2 # jmp %_in_set_loop_end2
## bootstrappable.c 60
## bootstrappable.c 61
:_in_set_else3 #:_in_set_else3 # no else
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_in_set_else4 # je %_in_set_else4
## bootstrappable.c 61
50 # push_eax # 1
B8 01000000 # mov_eax, %1
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## bootstrappable.c 62
:_in_set_else4 #:_in_set_else4 # no else
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_in_set_loop2 # jmp %_in_set_loop2
:_in_set_loop_end2 #:_in_set_loop_end2
## bootstrappable.c 64
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f___index_number #:f___index_number
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 71
:___index_number_loop1 #:___index_number_loop1
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___index_number_else2 # je %___index_number_else2
E9 %___index_number_loop_end1 # jmp %___index_number_loop_end1
## bootstrappable.c 72
## bootstrappable.c 73
:___index_number_else2 #:___index_number_else2 # no else
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 74
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # s (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___index_number_else3 # je %___index_number_else3
## bootstrappable.c 74
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
:___index_number_else3 #:___index_number_else3 # no else
E9 %___index_number_loop1 # jmp %___index_number_loop1
:___index_number_loop_end1 #:___index_number_loop_end1
## bootstrappable.c 76
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f___toupper #:f___toupper
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## bootstrappable.c 82
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'abcdefghijklmnopqrstuvwxyz'
B8 &string_12 # mov_eax, &string_12
50 # push_eax # in_set (function)
B8 &f_in_set # mov_eax, &f_in_set
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___toupper_else1 # je %___toupper_else1
## bootstrappable.c 82
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 223
B8 DF000000 # mov_eax, %223
5B # pop_ebx # &
21D8 # and_eax,ebx
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## bootstrappable.c 83
:___toupper_else1 #:___toupper_else1 # no else
50 # push_eax # c (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f___set_reader #:f___set_reader
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # mult (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # set (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # negative_p (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 94
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 45
B8 2D000000 # mov_eax, %45
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___set_reader_else1 # je %___set_reader_else1
## bootstrappable.c 95
## bootstrappable.c 96
50 # push_eax # negative_p (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 97
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 100
:___set_reader_else1 #:___set_reader_else1 # no else
:___set_reader_loop2 #:___set_reader_loop2
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # set (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # in_set (function)
B8 &f_in_set # mov_eax, &f_in_set
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___set_reader_else3 # je %___set_reader_else3
E9 %___set_reader_loop_end2 # jmp %___set_reader_loop_end2
## bootstrappable.c 101
## bootstrappable.c 102
:___set_reader_else3 #:___set_reader_else3 # no else
50 # push_eax # 95
B8 5F000000 # mov_eax, %95
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___set_reader_else4 # je %___set_reader_else4
## bootstrappable.c 103
## bootstrappable.c 104
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 105
E9 %___set_reader_loop2 # jmp %___set_reader_loop2
## bootstrappable.c 108
:___set_reader_else4 #:___set_reader_else4 # no else
50 # push_eax # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # mult (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 109
50 # push_eax # hold (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # set (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # __toupper (function)
B8 &f___toupper # mov_eax, &f___toupper
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
50 # push_eax # __index_number (function)
B8 &f___index_number # mov_eax, &f___index_number
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 112
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # hold (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___set_reader_else5 # je %___set_reader_else5
## bootstrappable.c 112
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## bootstrappable.c 113
:___set_reader_else5 #:___set_reader_else5 # no else
50 # push_eax # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # hold (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 114
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %___set_reader_loop2 # jmp %___set_reader_loop2
:___set_reader_loop_end2 #:___set_reader_loop_end2
## bootstrappable.c 118
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___set_reader_else6 # je %___set_reader_else6
## bootstrappable.c 118
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## bootstrappable.c 120
:___set_reader_else6 #:___set_reader_else6 # no else
50 # push_eax # negative_p (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %___set_reader_else7 # je %___set_reader_else7
## bootstrappable.c 121
## bootstrappable.c 122
50 # push_eax # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 125
:___set_reader_else7 #:___set_reader_else7 # no else
50 # push_eax # n (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_strtoint #:f_strtoint
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 132
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoint_else1 # je %_strtoint_else1
## bootstrappable.c 133
## bootstrappable.c 134
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_strtoint_else_end1 # jmp %_strtoint_else_end1
:_strtoint_else1 #:_strtoint_else1
## bootstrappable.c 137
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_strtoint_and_end2 # je %_strtoint_and_end2
58 # pop_eax
50 # push_eax # 98
B8 62000000 # mov_eax, %98
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_strtoint_and_end2 #:_strtoint_and_end2
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoint_else3 # je %_strtoint_else3
## bootstrappable.c 138
## bootstrappable.c 139
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # '01_'
B8 &string_13 # mov_eax, &string_13
50 # push_eax # 2
B8 02000000 # mov_eax, %2
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # __set_reader (function)
B8 &f___set_reader # mov_eax, &f___set_reader
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_strtoint_else_end3 # jmp %_strtoint_else_end3
:_strtoint_else3 #:_strtoint_else3
## bootstrappable.c 142
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_strtoint_and_end4 # je %_strtoint_and_end4
58 # pop_eax
50 # push_eax # 120
B8 78000000 # mov_eax, %120
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_strtoint_and_end4 #:_strtoint_and_end4
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoint_else5 # je %_strtoint_else5
## bootstrappable.c 143
## bootstrappable.c 144
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # '0123456789ABCDEFabcdef_'
B8 &string_14 # mov_eax, &string_14
50 # push_eax # 16
B8 10000000 # mov_eax, %16
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # __set_reader (function)
B8 &f___set_reader # mov_eax, &f___set_reader
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_strtoint_else_end5 # jmp %_strtoint_else_end5
:_strtoint_else5 #:_strtoint_else5
## bootstrappable.c 147
50 # push_eax # 48
B8 30000000 # mov_eax, %48
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoint_else6 # je %_strtoint_else6
## bootstrappable.c 148
## bootstrappable.c 149
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # '01234567_'
B8 &string_15 # mov_eax, &string_15
50 # push_eax # 8
B8 08000000 # mov_eax, %8
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # __set_reader (function)
B8 &f___set_reader # mov_eax, &f___set_reader
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_strtoint_else_end6 # jmp %_strtoint_else_end6
:_strtoint_else6 #:_strtoint_else6
## bootstrappable.c 153
## bootstrappable.c 154
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # '0123456789_'
B8 &string_16 # mov_eax, &string_16
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # a (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # __set_reader (function)
B8 &f___set_reader # mov_eax, &f___set_reader
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_strtoint_else_end6 #:_strtoint_else_end6
:_strtoint_else_end5 #:_strtoint_else_end5
:_strtoint_else_end3 #:_strtoint_else_end3
:_strtoint_else_end1 #:_strtoint_else_end1
## bootstrappable.c 158
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 2147483648
B8 00000080 # mov_eax, %2147483648
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # &
21D8 # and_eax,ebx
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_strtoint_else7 # je %_strtoint_else7
## bootstrappable.c 158
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # 31
B8 1F000000 # mov_eax, %31
89C1 # mov_ecx,eax # <<
58 # pop_eax
D3E0 # shl_eax,cl
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # |
09D8 # or_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 159
:_strtoint_else7 #:_strtoint_else7 # no else
50 # push_eax # result (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_int2str #:f_int2str
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # signed_p (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # x (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## bootstrappable.c 164
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
50 # push_eax # 'int2str doesn't support a base less than 2\n'
B8 &string_17 # mov_eax, &string_17
50 # push_eax # require (function)
B8 &f_require # mov_eax, &f_require
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
58 # pop_eax # ;
## bootstrappable.c 165
50 # push_eax # 37
B8 25000000 # mov_eax, %37
50 # push_eax # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
50 # push_eax # 'int2str doesn't support a base more than 36\n'
B8 &string_18 # mov_eax, &string_18
50 # push_eax # require (function)
B8 &f_require # mov_eax, &f_require
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
58 # pop_eax # ;
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 34
B8 22000000 # mov_eax, %34
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # calloc (function)
B8 &f_calloc # mov_eax, &f_calloc
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 169
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_int2str_else1 # je %_int2str_else1
## bootstrappable.c 169
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## bootstrappable.c 171
:_int2str_else1 #:_int2str_else1 # no else
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # sign_p (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # table (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
B8 &string_19 # mov_eax, &string_19
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 176
50 # push_eax # signed_p (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
85C0 # test_eax,eax # &&
0F84 %_int2str_and_end2 # je %_int2str_and_end2
58 # pop_eax
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_int2str_and_end2 #:_int2str_and_end2
85C0 # test_eax,eax # &&
0F84 %_int2str_and_end3 # je %_int2str_and_end3
58 # pop_eax
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # x (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2147483648
B8 00000080 # mov_eax, %2147483648
5B # pop_ebx # &
21D8 # and_eax,ebx
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
:_int2str_and_end3 #:_int2str_and_end3
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_int2str_else4 # je %_int2str_else4
## bootstrappable.c 177
## bootstrappable.c 179
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # x (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
50 # push_eax # 2147483647
B8 FFFFFF7F # mov_eax, %2147483647
5B # pop_ebx # &
21D8 # and_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 180
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_int2str_else5 # je %_int2str_else5
## bootstrappable.c 180
50 # push_eax # '-2147483648'
B8 &string_20 # mov_eax, &string_20
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## bootstrappable.c 181
:_int2str_else5 #:_int2str_else5 # no else
50 # push_eax # sign_p (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_int2str_else_end4 # jmp %_int2str_else_end4
:_int2str_else4 #:_int2str_else4
## bootstrappable.c 183
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # x (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2147483647
B8 FFFFFF7F # mov_eax, %2147483647
50 # push_eax # 2147483648
B8 00000080 # mov_eax, %2147483648
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # &
21D8 # and_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_int2str_else_end4 #:_int2str_else_end4
## bootstrappable.c 185
:_int2str_loop6 #:_int2str_loop6
## bootstrappable.c 186
## bootstrappable.c 187
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # table (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
89C3 # mov_ebx,eax # %s
58 # pop_eax
99 # cdq
F7FB # idiv_ebx
89D0 5B # mov_eax,edx pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## bootstrappable.c 188
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 189
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # base (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
89C3 # mov_ebx,eax # /s
58 # pop_eax
99 # cdq
F7FB # idiv_ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # i (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <
39C3 # cmp_eax_ebx
0F92C0 # setb_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_int2str_else7 # je %_int2str_else7
E9 %_int2str_loop_end6 # jmp %_int2str_loop_end6
:_int2str_else7 #:_int2str_else7 # no else
E9 %_int2str_loop6 # jmp %_int2str_loop6
:_int2str_loop_end6 #:_int2str_loop_end6
## bootstrappable.c 192
50 # push_eax # sign_p (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_int2str_else8 # je %_int2str_else8
## bootstrappable.c 193
## bootstrappable.c 194
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 45
B8 2D000000 # mov_eax, %45
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## bootstrappable.c 195
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## bootstrappable.c 198
:_int2str_else8 #:_int2str_else8 # no else
50 # push_eax # p (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_consume_token #:f_consume_token
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # fgetc (function)
B8 &f_fgetc # mov_eax, &f_fgetc
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 75
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
50 # push_eax # 'Can not have an EOF token\n'
B8 &string_21 # mov_eax, &string_21
50 # push_eax # require (function)
B8 &f_require # mov_eax, &f_require
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
58 # pop_eax # ;
## blood-elf.c 76
:_consume_token_loop1 #:_consume_token_loop1
## blood-elf.c 77
## blood-elf.c 78
50 # push_eax # s (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## blood-elf.c 79
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 80
50 # push_eax # max_string (global)
B8 &g_max_string # mov_eax, &g_max_string
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # >s
39C3 # cmp_eax_ebx
0F9FC0 # setg_al
0FB6C0 # movzx_eax,al
50 # push_eax # 'Token exceeds token length restriction\n'
B8 &string_22 # mov_eax, &string_22
50 # push_eax # require (function)
B8 &f_require # mov_eax, &f_require
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
58 # pop_eax # ;
## blood-elf.c 81
50 # push_eax # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # fgetc (function)
B8 &f_fgetc # mov_eax, &f_fgetc
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 82
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_consume_token_else2 # je %_consume_token_else2
## blood-elf.c 82
E9 %_consume_token_loop_end1 # jmp %_consume_token_loop_end1
:_consume_token_else2 #:_consume_token_else2 # no else
50 # push_eax # c (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # ' \t\n>'
B8 &string_23 # mov_eax, &string_23
50 # push_eax # in_set (function)
B8 &f_in_set # mov_eax, &f_in_set
81C5 14000000 # add_ebp, %20 # ()
FFD0 # call_eax
81ED 14000000 # sub_ebp, %20
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_consume_token_else3 # je %_consume_token_else3
E9 %_consume_token_loop_end1 # jmp %_consume_token_loop_end1
:_consume_token_else3 #:_consume_token_else3 # no else
E9 %_consume_token_loop1 # jmp %_consume_token_loop1
:_consume_token_loop_end1 #:_consume_token_loop_end1
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_storeLabel #:f_storeLabel
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # entry (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # 8
B8 08000000 # mov_eax, %8
50 # push_eax # calloc (function)
B8 &f_calloc # mov_eax, &f_calloc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 91
50 # push_eax # entry (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
50 # push_eax # jump_table (global)
B8 &g_jump_table # mov_eax, &g_jump_table
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 92
50 # push_eax # jump_table (global)
B8 &g_jump_table # mov_eax, &g_jump_table
50 # push_eax # entry (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 95
50 # push_eax # entry (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
50 # push_eax # max_string (global)
B8 &g_max_string # mov_eax, &g_max_string
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # calloc (function)
B8 &f_calloc # mov_eax, &f_calloc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 96
50 # push_eax # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # entry (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # consume_token (function)
B8 &f_consume_token # mov_eax, &f_consume_token
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 98
50 # push_eax # count (global)
B8 &g_count # mov_eax, &g_count
50 # push_eax # count (global)
B8 &g_count # mov_eax, &g_count
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_line_Comment #:f_line_Comment
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # fgetc (function)
B8 &f_fgetc # mov_eax, &f_fgetc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 104
:_line_Comment_loop1 #:_line_Comment_loop1
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # '\n?'
B8 &string_24 # mov_eax, &string_24
50 # push_eax # in_set (function)
B8 &f_in_set # mov_eax, &f_in_set
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_line_Comment_else2 # je %_line_Comment_else2
E9 %_line_Comment_loop_end1 # jmp %_line_Comment_loop_end1
## blood-elf.c 105
## blood-elf.c 106
:_line_Comment_else2 #:_line_Comment_else2 # no else
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_line_Comment_else3 # je %_line_Comment_else3
## blood-elf.c 106
E9 %_line_Comment_loop_end1 # jmp %_line_Comment_loop_end1
## blood-elf.c 107
:_line_Comment_else3 #:_line_Comment_else3 # no else
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # fgetc (function)
B8 &f_fgetc # mov_eax, &f_fgetc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_line_Comment_loop1 # jmp %_line_Comment_loop1
:_line_Comment_loop_end1 #:_line_Comment_loop_end1
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_purge_string #:f_purge_string
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # fgetc (function)
B8 &f_fgetc # mov_eax, &f_fgetc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 114
:_purge_string_loop1 #:_purge_string_loop1
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_purge_string_and_end2 # je %_purge_string_and_end2
58 # pop_eax
50 # push_eax # 34
B8 22000000 # mov_eax, %34
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
:_purge_string_and_end2 #:_purge_string_and_end2
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_purge_string_else3 # je %_purge_string_else3
E9 %_purge_string_loop_end1 # jmp %_purge_string_loop_end1
## blood-elf.c 115
## blood-elf.c 116
:_purge_string_else3 #:_purge_string_else3 # no else
50 # push_eax # c (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # source_file (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # fgetc (function)
B8 &f_fgetc # mov_eax, &f_fgetc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_purge_string_loop1 # jmp %_purge_string_loop1
:_purge_string_loop_end1 #:_purge_string_loop_end1
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_first_pass #:f_first_pass
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## blood-elf.c 122
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_first_pass_else1 # je %_first_pass_else1
## blood-elf.c 122
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## blood-elf.c 123
:_first_pass_else1 #:_first_pass_else1 # no else
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
50 # push_eax # first_pass (function)
B8 &f_first_pass # mov_eax, &f_first_pass
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'r'
B8 &string_25 # mov_eax, &string_25
50 # push_eax # fopen (function)
B8 &f_fopen # mov_eax, &f_fopen
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 127
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_first_pass_else2 # je %_first_pass_else2
## blood-elf.c 128
## blood-elf.c 129
50 # push_eax # 'The file: '
B8 &string_26 # mov_eax, &string_26
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 130
50 # push_eax # input (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 131
50 # push_eax # ' can not be opened!\n'
B8 &string_27 # mov_eax, &string_27
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 132
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
:_first_pass_else2 #:_first_pass_else2 # no else
## blood-elf.c 136
50 # push_eax # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # fgetc (function)
B8 &f_fgetc # mov_eax, &f_fgetc
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_first_pass_loop3 #:_first_pass_loop3
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_first_pass_else4 # je %_first_pass_else4
E9 %_first_pass_loop_end3 # jmp %_first_pass_loop_end3
## blood-elf.c 137
## blood-elf.c 139
:_first_pass_else4 #:_first_pass_else4 # no else
50 # push_eax # 58
B8 3A000000 # mov_eax, %58
50 # push_eax # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_first_pass_else5 # je %_first_pass_else5
## blood-elf.c 140
## blood-elf.c 141
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # storeLabel (function)
B8 &f_storeLabel # mov_eax, &f_storeLabel
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
58 # pop_eax # ;
E9 %_first_pass_else_end5 # jmp %_first_pass_else_end5
:_first_pass_else5 #:_first_pass_else5
## blood-elf.c 144
50 # push_eax # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 35
B8 23000000 # mov_eax, %35
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # ||
0F85 %_first_pass_or_end6 # jne %_first_pass_or_end6
58 # pop_eax
50 # push_eax # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 59
B8 3B000000 # mov_eax, %59
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_first_pass_or_end6 #:_first_pass_or_end6
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_first_pass_else7 # je %_first_pass_else7
## blood-elf.c 145
## blood-elf.c 146
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # line_Comment (function)
B8 &f_line_Comment # mov_eax, &f_line_Comment
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
58 # pop_eax # ;
E9 %_first_pass_else_end7 # jmp %_first_pass_else_end7
:_first_pass_else7 #:_first_pass_else7
## blood-elf.c 148
50 # push_eax # 34
B8 22000000 # mov_eax, %34
50 # push_eax # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_first_pass_else8 # je %_first_pass_else8
## blood-elf.c 149
## blood-elf.c 150
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # purge_string (function)
B8 &f_purge_string # mov_eax, &f_purge_string
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
58 # pop_eax # ;
:_first_pass_else8 #:_first_pass_else8 # no else
:_first_pass_else_end7 #:_first_pass_else_end7
:_first_pass_else_end5 #:_first_pass_else_end5
50 # push_eax # c (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # fgetc (function)
B8 &f_fgetc # mov_eax, &f_fgetc
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_first_pass_loop3 # jmp %_first_pass_loop3
:_first_pass_loop_end3 #:_first_pass_loop_end3
## blood-elf.c 153
50 # push_eax # source_file (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # fclose (function)
B8 &f_fclose # mov_eax, &f_fclose
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_output_string_table #:f_output_string_table
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # node (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## blood-elf.c 158
50 # push_eax # '\n# Generated string table\n:ELF_str\n'
B8 &string_28 # mov_eax, &string_28
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 159
50 # push_eax # zero_8 (global)
B8 &g_zero_8 # mov_eax, &g_zero_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 160
50 # push_eax # '\t# NULL string\n'
B8 &string_29 # mov_eax, &string_29
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 162
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # node (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_output_string_table_loop1 #:_output_string_table_loop1
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_output_string_table_else2 # je %_output_string_table_else2
E9 %_output_string_table_loop_end1 # jmp %_output_string_table_loop_end1
## blood-elf.c 163
## blood-elf.c 164
:_output_string_table_else2 #:_output_string_table_else2 # no else
50 # push_eax # ':ELF_str_'
B8 &string_30 # mov_eax, &string_30
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 165
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 166
50 # push_eax # '\t\"'
B8 &string_31 # mov_eax, &string_31
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 167
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 168
50 # push_eax # '\" # \"'
B8 &string_32 # mov_eax, &string_32
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 169
50 # push_eax # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_output_string_table_loop3 #:_output_string_table_loop3
50 # push_eax # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_output_string_table_else4 # je %_output_string_table_else4
E9 %_output_string_table_loop_end3 # jmp %_output_string_table_loop_end3
## blood-elf.c 170
:_output_string_table_else4 #:_output_string_table_else4 # no else
50 # push_eax # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_output_string_table_else5 # je %_output_string_table_else5
## blood-elf.c 171
50 # push_eax # '\\n'
B8 &string_33 # mov_eax, &string_33
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
58 # pop_eax # ;
E9 %_output_string_table_else_end5 # jmp %_output_string_table_else_end5
:_output_string_table_else5 #:_output_string_table_else5
## blood-elf.c 172
50 # push_eax # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 9
B8 09000000 # mov_eax, %9
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_output_string_table_else6 # je %_output_string_table_else6
## blood-elf.c 173
50 # push_eax # '\\t'
B8 &string_34 # mov_eax, &string_34
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
58 # pop_eax # ;
E9 %_output_string_table_else_end6 # jmp %_output_string_table_else_end6
:_output_string_table_else6 #:_output_string_table_else6
## blood-elf.c 174
50 # push_eax # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # >=sfv
39C3 # cmp_eax_ebx
0F9DC0 # setge_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_output_string_table_else7 # je %_output_string_table_else7
## blood-elf.c 175
50 # push_eax # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 10000000 # add_ebp, %16 # ()
FFD0 # call_eax
81ED 10000000 # sub_ebp, %16
58 # pop_eax # ;
:_output_string_table_else7 #:_output_string_table_else7 # no else
:_output_string_table_else_end6 #:_output_string_table_else_end6
:_output_string_table_else_end5 #:_output_string_table_else_end5
50 # push_eax # s (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
58 # pop_eax # ;
E9 %_output_string_table_loop3 # jmp %_output_string_table_loop3
:_output_string_table_loop_end3 #:_output_string_table_loop_end3
## blood-elf.c 176
50 # push_eax # '\"\n'
B8 &string_35 # mov_eax, &string_35
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_output_string_table_loop1 # jmp %_output_string_table_loop1
:_output_string_table_loop_end1 #:_output_string_table_loop_end1
## blood-elf.c 178
50 # push_eax # '# END Generated string table\n\n'
B8 &string_36 # mov_eax, &string_36
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_output_symbol_table #:f_output_symbol_table
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # node (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## blood-elf.c 183
50 # push_eax # '\n# Generated symbol table\n:ELF_sym\n# Required NULL symbol entry\n'
B8 &string_37 # mov_eax, &string_37
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 184
50 # push_eax # 64
B8 40000000 # mov_eax, %64
50 # push_eax # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_output_symbol_table_else1 # je %_output_symbol_table_else1
## blood-elf.c 185
## blood-elf.c 186
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 187
50 # push_eax # '\t# st_name\n'
B8 &string_38 # mov_eax, &string_38
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 189
50 # push_eax # zero_8 (global)
B8 &g_zero_8 # mov_eax, &g_zero_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 190
50 # push_eax # '\t# st_info\n'
B8 &string_39 # mov_eax, &string_39
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 192
50 # push_eax # zero_8 (global)
B8 &g_zero_8 # mov_eax, &g_zero_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 193
50 # push_eax # '\t# st_other\n'
B8 &string_40 # mov_eax, &string_40
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 195
50 # push_eax # one_16 (global)
B8 &g_one_16 # mov_eax, &g_one_16
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 196
50 # push_eax # '\t# st_shndx\n'
B8 &string_41 # mov_eax, &string_41
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 198
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 199
50 # push_eax # 32
B8 20000000 # mov_eax, %32
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 200
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 201
50 # push_eax # '\t# st_value\n'
B8 &string_42 # mov_eax, &string_42
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 203
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 204
50 # push_eax # 32
B8 20000000 # mov_eax, %32
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 205
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 206
50 # push_eax # '\t# st_size\n\n'
B8 &string_43 # mov_eax, &string_43
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
E9 %_output_symbol_table_else_end1 # jmp %_output_symbol_table_else_end1
:_output_symbol_table_else1 #:_output_symbol_table_else1
## blood-elf.c 209
## blood-elf.c 210
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 211
50 # push_eax # '\t# st_name\n'
B8 &string_38 # mov_eax, &string_38
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 213
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 214
50 # push_eax # '\t# st_value\n'
B8 &string_42 # mov_eax, &string_42
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 216
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 217
50 # push_eax # '\t# st_size\n'
B8 &string_44 # mov_eax, &string_44
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 219
50 # push_eax # zero_8 (global)
B8 &g_zero_8 # mov_eax, &g_zero_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 220
50 # push_eax # '\t# st_info\n'
B8 &string_39 # mov_eax, &string_39
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 222
50 # push_eax # zero_8 (global)
B8 &g_zero_8 # mov_eax, &g_zero_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 223
50 # push_eax # '\t# st_other\n'
B8 &string_40 # mov_eax, &string_40
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 225
50 # push_eax # one_16 (global)
B8 &g_one_16 # mov_eax, &g_one_16
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
## blood-elf.c 226
50 # push_eax # '\t# st_shndx\n\n'
B8 &string_45 # mov_eax, &string_45
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
58 # pop_eax # ;
:_output_symbol_table_else_end1 #:_output_symbol_table_else_end1
## blood-elf.c 230
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # node (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_output_symbol_table_loop2 #:_output_symbol_table_loop2
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_output_symbol_table_else3 # je %_output_symbol_table_else3
E9 %_output_symbol_table_loop_end2 # jmp %_output_symbol_table_loop_end2
## blood-elf.c 231
## blood-elf.c 232
:_output_symbol_table_else3 #:_output_symbol_table_else3 # no else
50 # push_eax # '%ELF_str_'
B8 &string_46 # mov_eax, &string_46
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 233
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 234
50 # push_eax # '>ELF_str\t# st_name\n'
B8 &string_47 # mov_eax, &string_47
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 236
50 # push_eax # 64
B8 40000000 # mov_eax, %64
50 # push_eax # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_output_symbol_table_else4 # je %_output_symbol_table_else4
## blood-elf.c 237
## blood-elf.c 238
50 # push_eax # two_8 (global)
B8 &g_two_8 # mov_eax, &g_two_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 239
50 # push_eax # '\t# st_info (FUNC)\n'
B8 &string_48 # mov_eax, &string_48
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 241
50 # push_eax # 95
B8 5F000000 # mov_eax, %95
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_output_symbol_table_and_end5 # je %_output_symbol_table_and_end5
58 # pop_eax
50 # push_eax # entry (global)
B8 &g_entry # mov_eax, &g_entry
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_output_symbol_table_and_end5 #:_output_symbol_table_and_end5
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_output_symbol_table_else6 # je %_output_symbol_table_else6
## blood-elf.c 242
## blood-elf.c 243
50 # push_eax # two_8 (global)
B8 &g_two_8 # mov_eax, &g_two_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 244
50 # push_eax # '\t# st_other (hidden)\n'
B8 &string_49 # mov_eax, &string_49
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
E9 %_output_symbol_table_else_end6 # jmp %_output_symbol_table_else_end6
:_output_symbol_table_else6 #:_output_symbol_table_else6
## blood-elf.c 247
## blood-elf.c 248
50 # push_eax # zero_8 (global)
B8 &g_zero_8 # mov_eax, &g_zero_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 249
50 # push_eax # '\t# st_other (other)\n'
B8 &string_50 # mov_eax, &string_50
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
:_output_symbol_table_else_end6 #:_output_symbol_table_else_end6
## blood-elf.c 252
50 # push_eax # one_16 (global)
B8 &g_one_16 # mov_eax, &g_one_16
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 253
50 # push_eax # '\t# st_shndx\n'
B8 &string_41 # mov_eax, &string_41
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 255
50 # push_eax # '&'
B8 &string_51 # mov_eax, &string_51
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 256
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 257
50 # push_eax # 32
B8 20000000 # mov_eax, %32
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 258
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 259
50 # push_eax # '\t# st_value\n'
B8 &string_42 # mov_eax, &string_42
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 261
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 262
50 # push_eax # 32
B8 20000000 # mov_eax, %32
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 263
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 264
50 # push_eax # '\t# st_size (unknown size)\n\n'
B8 &string_52 # mov_eax, &string_52
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
E9 %_output_symbol_table_else_end4 # jmp %_output_symbol_table_else_end4
:_output_symbol_table_else4 #:_output_symbol_table_else4
## blood-elf.c 267
## blood-elf.c 268
50 # push_eax # '&'
B8 &string_51 # mov_eax, &string_51
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 269
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 270
50 # push_eax # '\t#st_value\n'
B8 &string_53 # mov_eax, &string_53
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 272
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 273
50 # push_eax # '\t# st_size (unknown size)\n'
B8 &string_54 # mov_eax, &string_54
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 275
50 # push_eax # two_8 (global)
B8 &g_two_8 # mov_eax, &g_two_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 276
50 # push_eax # '\t# st_info (FUNC)\n'
B8 &string_48 # mov_eax, &string_48
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 278
50 # push_eax # 95
B8 5F000000 # mov_eax, %95
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # +
01D8 # add_eax,ebx
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # &&
0F84 %_output_symbol_table_and_end7 # je %_output_symbol_table_and_end7
58 # pop_eax
50 # push_eax # entry (global)
B8 &g_entry # mov_eax, &g_entry
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
:_output_symbol_table_and_end7 #:_output_symbol_table_and_end7
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_output_symbol_table_else8 # je %_output_symbol_table_else8
## blood-elf.c 279
## blood-elf.c 280
50 # push_eax # two_8 (global)
B8 &g_two_8 # mov_eax, &g_two_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 281
50 # push_eax # '\t# st_other (hidden)\n'
B8 &string_49 # mov_eax, &string_49
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
E9 %_output_symbol_table_else_end8 # jmp %_output_symbol_table_else_end8
:_output_symbol_table_else8 #:_output_symbol_table_else8
## blood-elf.c 284
## blood-elf.c 285
50 # push_eax # zero_8 (global)
B8 &g_zero_8 # mov_eax, &g_zero_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 286
50 # push_eax # '\t# st_other (default)\n'
B8 &string_55 # mov_eax, &string_55
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
:_output_symbol_table_else_end8 #:_output_symbol_table_else_end8
## blood-elf.c 289
50 # push_eax # one_16 (global)
B8 &g_one_16 # mov_eax, &g_one_16
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 290
50 # push_eax # '\t# st_shndx\n\n'
B8 &string_45 # mov_eax, &string_45
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
:_output_symbol_table_else_end4 #:_output_symbol_table_else_end4
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # i (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_output_symbol_table_loop2 # jmp %_output_symbol_table_loop2
:_output_symbol_table_loop_end2 #:_output_symbol_table_loop_end2
## blood-elf.c 294
50 # push_eax # '# END Generated symbol table\n'
B8 &string_56 # mov_eax, &string_56
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_reverse_list #:f_reverse_list
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # root (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 301
:_reverse_list_loop1 #:_reverse_list_loop1
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_reverse_list_else2 # je %_reverse_list_else2
E9 %_reverse_list_loop_end1 # jmp %_reverse_list_loop_end1
## blood-elf.c 302
## blood-elf.c 303
:_reverse_list_else2 #:_reverse_list_else2 # no else
50 # push_eax # next (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 304
50 # push_eax # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
50 # push_eax # root (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 305
50 # push_eax # root (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
50 # push_eax # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 306
50 # push_eax # head (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
50 # push_eax # next (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_reverse_list_loop1 # jmp %_reverse_list_loop1
:_reverse_list_loop_end1 #:_reverse_list_loop_end1
## blood-elf.c 308
50 # push_eax # root (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_write_int #:f_write_int
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # label (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # field (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## blood-elf.c 313
50 # push_eax # field (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 314
50 # push_eax # '\t#'
B8 &string_57 # mov_eax, &string_57
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 315
50 # push_eax # label (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 316
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_write_register #:f_write_register
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # label (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # field (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## blood-elf.c 323
50 # push_eax # field (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 324
50 # push_eax # 64
B8 40000000 # mov_eax, %64
50 # push_eax # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_write_register_else1 # je %_write_register_else1
## blood-elf.c 325
## blood-elf.c 326
50 # push_eax # 32
B8 20000000 # mov_eax, %32
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 327
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 330
:_write_register_else1 #:_write_register_else1 # no else
50 # push_eax # '\t#'
B8 &string_57 # mov_eax, &string_57
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 331
50 # push_eax # label (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
## blood-elf.c 332
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_write_section #:f_write_section
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # entry (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # info (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # link (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # size (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # offset (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # address (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # flags (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # type (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # name (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # label (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## blood-elf.c 338
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 339
50 # push_eax # label (local)
8D85 28000000 # lea_eax,[ebp+DWORD] %40
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 340
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 342
50 # push_eax # name (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'sh_name'
B8 &string_58 # mov_eax, &string_58
50 # push_eax # write_int (function)
B8 &f_write_int # mov_eax, &f_write_int
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 343
50 # push_eax # type (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'sh_type'
B8 &string_59 # mov_eax, &string_59
50 # push_eax # write_int (function)
B8 &f_write_int # mov_eax, &f_write_int
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 344
50 # push_eax # flags (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'sh_flags'
B8 &string_60 # mov_eax, &string_60
50 # push_eax # write_register (function)
B8 &f_write_register # mov_eax, &f_write_register
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 345
50 # push_eax # address (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'sh_addr'
B8 &string_61 # mov_eax, &string_61
50 # push_eax # write_register (function)
B8 &f_write_register # mov_eax, &f_write_register
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 346
50 # push_eax # offset (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'sh_offset'
B8 &string_62 # mov_eax, &string_62
50 # push_eax # write_register (function)
B8 &f_write_register # mov_eax, &f_write_register
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 347
50 # push_eax # size (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'sh_size'
B8 &string_63 # mov_eax, &string_63
50 # push_eax # write_register (function)
B8 &f_write_register # mov_eax, &f_write_register
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 348
50 # push_eax # link (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'sh_link'
B8 &string_64 # mov_eax, &string_64
50 # push_eax # write_int (function)
B8 &f_write_int # mov_eax, &f_write_int
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 351
50 # push_eax # info (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 352
50 # push_eax # '\t#sh_info\n'
B8 &string_65 # mov_eax, &string_65
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 356
50 # push_eax # 64
B8 40000000 # mov_eax, %64
50 # push_eax # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_write_section_else1 # je %_write_section_else1
## blood-elf.c 357
## blood-elf.c 358
50 # push_eax # one_32 (global)
B8 &g_one_32 # mov_eax, &g_one_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 359
50 # push_eax # 32
B8 20000000 # mov_eax, %32
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputc (function)
B8 &f_fputc # mov_eax, &f_fputc
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 360
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 361
50 # push_eax # '\t#sh_addralign\n'
B8 &string_66 # mov_eax, &string_66
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
E9 %_write_section_else_end1 # jmp %_write_section_else_end1
:_write_section_else1 #:_write_section_else1
## blood-elf.c 364
## blood-elf.c 365
50 # push_eax # one_32 (global)
B8 &g_one_32 # mov_eax, &g_one_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
## blood-elf.c 366
50 # push_eax # '\t#sh_addralign\n'
B8 &string_66 # mov_eax, &string_66
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
:_write_section_else_end1 #:_write_section_else_end1
## blood-elf.c 369
50 # push_eax # entry (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'sh_entsize'
B8 &string_67 # mov_eax, &string_67
50 # push_eax # write_register (function)
B8 &f_write_register # mov_eax, &f_write_register
81C5 2C000000 # add_ebp, %44 # ()
FFD0 # call_eax
81ED 2C000000 # sub_ebp, %44
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_nibble_to_hex #:f_nibble_to_hex
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # nibble (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## blood-elf.c 374
50 # push_eax # nibble (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # nibble (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
0FBEC0 # movsx_eax,al # char
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_nibble_to_hex_else1 # je %_nibble_to_hex_else1
50 # push_eax # 48
B8 30000000 # mov_eax, %48
E9 %_nibble_to_hex_else_end1 # jmp %_nibble_to_hex_else_end1
:_nibble_to_hex_else1 #:_nibble_to_hex_else1
50 # push_eax # 65
B8 41000000 # mov_eax, %65
50 # push_eax # 10
B8 0A000000 # mov_eax, %10
5B # pop_ebx # -
29C3 # sub_ebx,eax
89D8 # mov_eax,ebx
:_nibble_to_hex_else_end1 #:_nibble_to_hex_else_end1
5B # pop_ebx # +
01D8 # add_eax,ebx
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_get_string #:f_get_string
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # shift (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # ByteMode (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # value (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # malloc (function)
B8 &f_malloc # mov_eax, &f_malloc
81C5 18000000 # add_ebp, %24 # ()
FFD0 # call_eax
81ED 18000000 # sub_ebp, %24
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 380
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # !=
39C3 # cmp_eax_ebx
0F95C0 # setne_al
0FB6C0 # movzx_eax,al
50 # push_eax # 'Exhausted available memory\n'
B8 &string_68 # mov_eax, &string_68
50 # push_eax # require (function)
B8 &f_require # mov_eax, &f_require
81C5 18000000 # add_ebp, %24 # ()
FFD0 # call_eax
81ED 18000000 # sub_ebp, %24
58 # pop_eax # ;
## blood-elf.c 381
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
:_get_string_loop1 #:_get_string_loop1
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <s
39C3 # cmp_eax_ebx
0F9CC0 # setl_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_get_string_else2 # je %_get_string_else2
E9 %_get_string_loop_end1 # jmp %_get_string_loop_end1
## blood-elf.c 382
:_get_string_else2 #:_get_string_else2 # no else
50 # push_eax # byte (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # value (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
89C1 # mov_ecx,eax # >>
58 # pop_eax
D3E8 # shr_eax,cl
50 # push_eax # 255
B8 FF000000 # mov_eax, %255
5B # pop_ebx # &
21D8 # and_eax,ebx
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## blood-elf.c 384
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # byte (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 4
B8 04000000 # mov_eax, %4
89C1 # mov_ecx,eax # >>
58 # pop_eax
D3E8 # shr_eax,cl
50 # push_eax # 15
B8 0F000000 # mov_eax, %15
5B # pop_ebx # &
21D8 # and_eax,ebx
50 # push_eax # nibble_to_hex (function)
B8 &f_nibble_to_hex # mov_eax, &f_nibble_to_hex
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## blood-elf.c 385
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # byte (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8A00 # mov_al,[eax] # ?1
0FB6C0 # movzx_eax,al
50 # push_eax # 15
B8 0F000000 # mov_eax, %15
5B # pop_ebx # &
21D8 # and_eax,ebx
50 # push_eax # nibble_to_hex (function)
B8 &f_nibble_to_hex # mov_eax, &f_nibble_to_hex
81C5 20000000 # add_ebp, %32 # ()
FFD0 # call_eax
81ED 20000000 # sub_ebp, %32
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
50 # push_eax # i (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # $ (dup)
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_get_string_loop1 # jmp %_get_string_loop1
:_get_string_loop_end1 #:_get_string_loop_end1
## blood-elf.c 387
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =1
8803 # mov_[ebx],al
58 # pop_eax # ;
## blood-elf.c 388
50 # push_eax # ch (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_setup_string #:f_setup_string
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # number_of_bytes (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # value (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## blood-elf.c 395
50 # push_eax # HEX (global)
B8 &g_HEX # mov_eax, &g_HEX
8B00 # mov_eax,[eax] # ?
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_setup_string_else1 # je %_setup_string_else1
## blood-elf.c 396
## blood-elf.c 397
50 # push_eax # size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 398
50 # push_eax # shift (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_setup_string_else_end1 # jmp %_setup_string_else_end1
:_setup_string_else1 #:_setup_string_else1
## blood-elf.c 400
50 # push_eax # OCTAL (global)
B8 &g_OCTAL # mov_eax, &g_OCTAL
8B00 # mov_eax,[eax] # ?
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_setup_string_else2 # je %_setup_string_else2
## blood-elf.c 401
## blood-elf.c 402
50 # push_eax # size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 3
B8 03000000 # mov_eax, %3
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 403
50 # push_eax # shift (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 3
B8 03000000 # mov_eax, %3
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_setup_string_else_end2 # jmp %_setup_string_else_end2
:_setup_string_else2 #:_setup_string_else2
## blood-elf.c 405
50 # push_eax # BINARY (global)
B8 &g_BINARY # mov_eax, &g_BINARY
8B00 # mov_eax,[eax] # ?
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_setup_string_else3 # je %_setup_string_else3
## blood-elf.c 406
## blood-elf.c 407
50 # push_eax # size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # 8
B8 08000000 # mov_eax, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 408
50 # push_eax # shift (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_setup_string_else_end3 # jmp %_setup_string_else_end3
:_setup_string_else3 #:_setup_string_else3
## blood-elf.c 411
## blood-elf.c 412
50 # push_eax # 'reached impossible mode\n'
B8 &string_69 # mov_eax, &string_69
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 18000000 # add_ebp, %24 # ()
FFD0 # call_eax
81ED 18000000 # sub_ebp, %24
58 # pop_eax # ;
## blood-elf.c 413
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 18000000 # add_ebp, %24 # ()
FFD0 # call_eax
81ED 18000000 # sub_ebp, %24
58 # pop_eax # ;
:_setup_string_else_end3 #:_setup_string_else_end3
:_setup_string_else_end2 #:_setup_string_else_end2
:_setup_string_else_end1 #:_setup_string_else_end1
## blood-elf.c 416
50 # push_eax # value (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # number_of_bytes (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # size (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # shift (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # get_string (function)
B8 &f_get_string # mov_eax, &f_get_string
81C5 18000000 # add_ebp, %24 # ()
FFD0 # call_eax
81ED 18000000 # sub_ebp, %24
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_setup_strings #:f_setup_strings
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
## blood-elf.c 421
50 # push_eax # zero_8 (global)
B8 &g_zero_8 # mov_eax, &g_zero_8
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 422
50 # push_eax # zero_16 (global)
B8 &g_zero_16 # mov_eax, &g_zero_16
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 2
B8 02000000 # mov_eax, %2
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 423
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 424
50 # push_eax # one_16 (global)
B8 &g_one_16 # mov_eax, &g_one_16
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # 2
B8 02000000 # mov_eax, %2
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 425
50 # push_eax # one_32 (global)
B8 &g_one_32 # mov_eax, &g_one_32
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 426
50 # push_eax # two_8 (global)
B8 &g_two_8 # mov_eax, &g_two_8
50 # push_eax # 2
B8 02000000 # mov_eax, %2
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 427
50 # push_eax # two_32 (global)
B8 &g_two_32 # mov_eax, &g_two_32
50 # push_eax # 2
B8 02000000 # mov_eax, %2
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 428
50 # push_eax # three_32 (global)
B8 &g_three_32 # mov_eax, &g_three_32
50 # push_eax # 3
B8 03000000 # mov_eax, %3
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 429
50 # push_eax # six_32 (global)
B8 &g_six_32 # mov_eax, &g_six_32
50 # push_eax # 6
B8 06000000 # mov_eax, %6
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 430
50 # push_eax # sixteen_32 (global)
B8 &g_sixteen_32 # mov_eax, &g_sixteen_32
50 # push_eax # 16
B8 10000000 # mov_eax, %16
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 431
50 # push_eax # twentyfour_32 (global)
B8 &g_twentyfour_32 # mov_eax, &g_twentyfour_32
50 # push_eax # 24
B8 18000000 # mov_eax, %24
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # ByteMode (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 08000000 # add_ebp, %8 # ()
FFD0 # call_eax
81ED 08000000 # sub_ebp, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f_main #:f_main
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
5B # pop_ebx # =:
8918 # mov_[eax],ebx
58 # pop_eax
50 # push_eax # __init_globals__ (function)
B8 &f___init_globals__ # mov_eax, &f___init_globals__
81C5 0C000000 # add_ebp, %12 # ()
FFD0 # call_eax
81ED 0C000000 # sub_ebp, %12
50 # push_eax # _sys_env (global)
B8 &g__sys_env # mov_eax, &g__sys_env
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 437
50 # push_eax # jump_table (global)
B8 &g_jump_table # mov_eax, &g_jump_table
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 439
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
50 # push_eax # stdout (global)
B8 &g_stdout # mov_eax, &g_stdout
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # output_file (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # ''
B8 &string_70 # mov_eax, &string_70
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 441
50 # push_eax # entry (global)
B8 &g_entry # mov_eax, &g_entry
50 # push_eax # ''
B8 &string_70 # mov_eax, &string_70
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 442
50 # push_eax # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
50 # push_eax # 32
B8 20000000 # mov_eax, %32
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 443
50 # push_eax # count (global)
B8 &g_count # mov_eax, &g_count
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 444
50 # push_eax # BigEndian (global)
B8 &g_BigEndian # mov_eax, &g_BigEndian
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # HEX (global)
B8 &g_HEX # mov_eax, &g_HEX
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # set (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 451
:_main_loop1 #:_main_loop1
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # argc (local)
8D85 08000000 # lea_eax,[ebp+DWORD] %8
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # <=s
39C3 # cmp_eax_ebx
0F9EC0 # setle_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else2 # je %_main_else2
E9 %_main_loop_end1 # jmp %_main_loop_end1
## blood-elf.c 452
## blood-elf.c 453
:_main_else2 #:_main_else2 # no else
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else3 # je %_main_else3
## blood-elf.c 454
## blood-elf.c 455
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_main_else_end3 # jmp %_main_else_end3
:_main_else3 #:_main_else3
## blood-elf.c 457
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '-h'
B8 &string_71 # mov_eax, &string_71
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # ||
0F85 %_main_or_end4 # jne %_main_or_end4
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--help'
B8 &string_72 # mov_eax, &string_72
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end4 #:_main_or_end4
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else5 # je %_main_else5
## blood-elf.c 458
## blood-elf.c 459
50 # push_eax # 'Usage: '
B8 &string_73 # mov_eax, &string_73
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 460
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 461
50 # push_eax # ' --file FILENAME1 {--file FILENAME2} --output FILENAME\n'
B8 &string_74 # mov_eax, &string_74
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 462
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
E9 %_main_else_end5 # jmp %_main_else_end5
:_main_else5 #:_main_else5
## blood-elf.c 464
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--64'
B8 &string_75 # mov_eax, &string_75
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else6 # je %_main_else6
## blood-elf.c 465
## blood-elf.c 466
50 # push_eax # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
50 # push_eax # 64
B8 40000000 # mov_eax, %64
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 467
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_main_else_end6 # jmp %_main_else_end6
:_main_else6 #:_main_else6
## blood-elf.c 469
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '-f'
B8 &string_76 # mov_eax, &string_76
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # ||
0F85 %_main_or_end7 # jne %_main_or_end7
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--file'
B8 &string_77 # mov_eax, &string_77
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end7 #:_main_or_end7
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else8 # je %_main_else8
## blood-elf.c 470
## blood-elf.c 471
50 # push_eax # temp (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # 8
B8 08000000 # mov_eax, %8
50 # push_eax # calloc (function)
B8 &f_calloc # mov_eax, &f_calloc
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 472
50 # push_eax # temp (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 473
50 # push_eax # temp (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
50 # push_eax # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 474
50 # push_eax # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
50 # push_eax # temp (local)
8D85 1C000000 # lea_eax,[ebp+DWORD] %28
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 475
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_main_else_end8 # jmp %_main_else_end8
:_main_else8 #:_main_else8
## blood-elf.c 477
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '-o'
B8 &string_78 # mov_eax, &string_78
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # ||
0F85 %_main_or_end9 # jne %_main_or_end9
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--output'
B8 &string_79 # mov_eax, &string_79
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end9 #:_main_or_end9
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else10 # je %_main_else10
## blood-elf.c 478
## blood-elf.c 479
50 # push_eax # output_file (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 480
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
50 # push_eax # output_file (local)
8D85 10000000 # lea_eax,[ebp+DWORD] %16
8B00 # mov_eax,[eax] # ?
50 # push_eax # 'w'
B8 &string_80 # mov_eax, &string_80
50 # push_eax # fopen (function)
B8 &f_fopen # mov_eax, &f_fopen
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 482
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else11 # je %_main_else11
## blood-elf.c 483
## blood-elf.c 484
50 # push_eax # 'The file: '
B8 &string_26 # mov_eax, &string_26
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 485
50 # push_eax # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 486
50 # push_eax # ' can not be opened!\n'
B8 &string_27 # mov_eax, &string_27
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 487
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 489
:_main_else11 #:_main_else11 # no else
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_main_else_end10 # jmp %_main_else_end10
:_main_else10 #:_main_else10
## blood-elf.c 491
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '-b'
B8 &string_81 # mov_eax, &string_81
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # ||
0F85 %_main_or_end12 # jne %_main_or_end12
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--binary'
B8 &string_82 # mov_eax, &string_82
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end12 #:_main_or_end12
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else13 # je %_main_else13
## blood-elf.c 492
## blood-elf.c 493
50 # push_eax # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # BINARY (global)
B8 &g_BINARY # mov_eax, &g_BINARY
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 494
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_main_else_end13 # jmp %_main_else_end13
:_main_else13 #:_main_else13
## blood-elf.c 496
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '-O'
B8 &string_83 # mov_eax, &string_83
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # ||
0F85 %_main_or_end14 # jne %_main_or_end14
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--octal'
B8 &string_84 # mov_eax, &string_84
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end14 #:_main_or_end14
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else15 # je %_main_else15
## blood-elf.c 497
## blood-elf.c 498
50 # push_eax # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # OCTAL (global)
B8 &g_OCTAL # mov_eax, &g_OCTAL
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 499
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_main_else_end15 # jmp %_main_else_end15
:_main_else15 #:_main_else15
## blood-elf.c 501
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '-X'
B8 &string_85 # mov_eax, &string_85
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # ||
0F85 %_main_or_end16 # jne %_main_or_end16
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--hex'
B8 &string_86 # mov_eax, &string_86
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end16 #:_main_or_end16
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else17 # je %_main_else17
## blood-elf.c 502
## blood-elf.c 503
50 # push_eax # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
50 # push_eax # HEX (global)
B8 &g_HEX # mov_eax, &g_HEX
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 504
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_main_else_end17 # jmp %_main_else_end17
:_main_else17 #:_main_else17
## blood-elf.c 506
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--big-endian'
B8 &string_87 # mov_eax, &string_87
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else18 # je %_main_else18
## blood-elf.c 507
## blood-elf.c 508
50 # push_eax # BigEndian (global)
B8 &g_BigEndian # mov_eax, &g_BigEndian
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 509
50 # push_eax # set (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 510
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_main_else_end18 # jmp %_main_else_end18
:_main_else18 #:_main_else18
## blood-elf.c 512
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--little-endian'
B8 &string_88 # mov_eax, &string_88
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else19 # je %_main_else19
## blood-elf.c 513
## blood-elf.c 514
50 # push_eax # BigEndian (global)
B8 &g_BigEndian # mov_eax, &g_BigEndian
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 515
50 # push_eax # set (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 516
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_main_else_end19 # jmp %_main_else_end19
:_main_else19 #:_main_else19
## blood-elf.c 518
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '-V'
B8 &string_89 # mov_eax, &string_89
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # ||
0F85 %_main_or_end20 # jne %_main_or_end20
58 # pop_eax
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--version'
B8 &string_90 # mov_eax, &string_90
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
:_main_or_end20 #:_main_or_end20
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else21 # je %_main_else21
## blood-elf.c 519
## blood-elf.c 520
50 # push_eax # 'blood-elf 2.0.1\n(Basically Launches Odd Object Dump ExecutabLe Files\n'
B8 &string_91 # mov_eax, &string_91
50 # push_eax # stdout (global)
B8 &g_stdout # mov_eax, &g_stdout
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 521
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
E9 %_main_else_end21 # jmp %_main_else_end21
:_main_else21 #:_main_else21
## blood-elf.c 523
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
50 # push_eax # '--entry'
B8 &string_92 # mov_eax, &string_92
50 # push_eax # match (function)
B8 &f_match # mov_eax, &f_match
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else22 # je %_main_else22
## blood-elf.c 524
## blood-elf.c 525
50 # push_eax # head (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
50 # push_eax # 1
B8 01000000 # mov_eax, %1
50 # push_eax # 8
B8 08000000 # mov_eax, %8
50 # push_eax # calloc (function)
B8 &f_calloc # mov_eax, &f_calloc
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 527
50 # push_eax # head (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ->
81C0 00000000 # add_eax, %0
50 # push_eax # jump_table (global)
B8 &g_jump_table # mov_eax, &g_jump_table
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 528
50 # push_eax # jump_table (global)
B8 &g_jump_table # mov_eax, &g_jump_table
50 # push_eax # head (local)
8D85 20000000 # lea_eax,[ebp+DWORD] %32
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 529
50 # push_eax # jump_table (global)
B8 &g_jump_table # mov_eax, &g_jump_table
8B00 # mov_eax,[eax] # ->
81C0 04000000 # add_eax, %4
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 531
50 # push_eax # entry (global)
B8 &g_entry # mov_eax, &g_entry
50 # push_eax # argv (local)
8D85 04000000 # lea_eax,[ebp+DWORD] %4
8B00 # mov_eax,[eax] # ?
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # *
F7E3 # mul_ebx
5B # pop_ebx # +
01D8 # add_eax,ebx
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 532
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
50 # push_eax # option_index (local)
8D85 24000000 # lea_eax,[ebp+DWORD] %36
8B00 # mov_eax,[eax] # ?
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 533
50 # push_eax # count (global)
B8 &g_count # mov_eax, &g_count
50 # push_eax # count (global)
B8 &g_count # mov_eax, &g_count
8B00 # mov_eax,[eax] # ?
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # +
01D8 # add_eax,ebx
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
E9 %_main_else_end22 # jmp %_main_else_end22
:_main_else22 #:_main_else22
## blood-elf.c 536
## blood-elf.c 537
50 # push_eax # 'Unknown option\n'
B8 &string_93 # mov_eax, &string_93
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 538
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
50 # push_eax # exit (function)
B8 &f_exit # mov_eax, &f_exit
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
:_main_else_end22 #:_main_else_end22
:_main_else_end21 #:_main_else_end21
:_main_else_end19 #:_main_else_end19
:_main_else_end18 #:_main_else_end18
:_main_else_end17 #:_main_else_end17
:_main_else_end15 #:_main_else_end15
:_main_else_end13 #:_main_else_end13
:_main_else_end10 #:_main_else_end10
:_main_else_end8 #:_main_else_end8
:_main_else_end6 #:_main_else_end6
:_main_else_end5 #:_main_else_end5
:_main_else_end3 #:_main_else_end3
E9 %_main_loop1 # jmp %_main_loop1
:_main_loop_end1 #:_main_loop_end1
## blood-elf.c 543
50 # push_eax # 0
B8 00000000 # mov_eax, %0
50 # push_eax # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else23 # je %_main_else23
## blood-elf.c 544
## blood-elf.c 545
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## blood-elf.c 549
:_main_else23 #:_main_else23 # no else
50 # push_eax # set (local)
8D85 18000000 # lea_eax,[ebp+DWORD] %24
8B00 # mov_eax,[eax] # ?
85C0 # test_eax,eax # !
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else24 # je %_main_else24
## blood-elf.c 550
## blood-elf.c 551
50 # push_eax # 'either --little-endian or --big-endian MUST be set\n'
B8 &string_94 # mov_eax, &string_94
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 552
50 # push_eax # 4294967295
B8 FFFFFFFF # mov_eax, %4294967295
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
## blood-elf.c 556
:_main_else24 #:_main_else24 # no else
50 # push_eax # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_strings (function)
B8 &f_setup_strings # mov_eax, &f_setup_strings
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 559
50 # push_eax # input (local)
8D85 0C000000 # lea_eax,[ebp+DWORD] %12
8B00 # mov_eax,[eax] # ?
50 # push_eax # first_pass (function)
B8 &f_first_pass # mov_eax, &f_first_pass
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 562
50 # push_eax # jump_table (global)
B8 &g_jump_table # mov_eax, &g_jump_table
50 # push_eax # jump_table (global)
B8 &g_jump_table # mov_eax, &g_jump_table
8B00 # mov_eax,[eax] # ?
50 # push_eax # reverse_list (function)
B8 &f_reverse_list # mov_eax, &f_reverse_list
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
## blood-elf.c 566
50 # push_eax # '# Generated sections\n:ELF_shstr\n'
B8 &string_95 # mov_eax, &string_95
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 567
50 # push_eax # zero_8 (global)
B8 &g_zero_8 # mov_eax, &g_zero_8
8B00 # mov_eax,[eax] # ?
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 568
50 # push_eax # '\t# NULL\n'
B8 &string_96 # mov_eax, &string_96
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 569
50 # push_eax # ':ELF_shstr__text\n\".text\"\n'
B8 &string_97 # mov_eax, &string_97
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 570
50 # push_eax # ':ELF_shstr__shstr\n\".shstrtab\"\n'
B8 &string_98 # mov_eax, &string_98
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 571
50 # push_eax # ':ELF_shstr__sym\n\".symtab\"\n'
B8 &string_99 # mov_eax, &string_99
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 572
50 # push_eax # ':ELF_shstr__str\n\".strtab\"\n'
B8 &string_100 # mov_eax, &string_100
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 575
50 # push_eax # ':ELF_section_headers'
B8 &string_101 # mov_eax, &string_101
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # write_section (function)
B8 &f_write_section # mov_eax, &f_write_section
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 576
50 # push_eax # ':ELF_section_header_text'
B8 &string_102 # mov_eax, &string_102
50 # push_eax # '%ELF_shstr__text>ELF_shstr'
B8 &string_103 # mov_eax, &string_103
50 # push_eax # one_32 (global)
B8 &g_one_32 # mov_eax, &g_one_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # six_32 (global)
B8 &g_six_32 # mov_eax, &g_six_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # '&ELF_text'
B8 &string_104 # mov_eax, &string_104
50 # push_eax # '%ELF_text>ELF_base'
B8 &string_105 # mov_eax, &string_105
50 # push_eax # '%ELF_data>ELF_text'
B8 &string_106 # mov_eax, &string_106
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # write_section (function)
B8 &f_write_section # mov_eax, &f_write_section
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 577
50 # push_eax # ':ELF_section_header_shstr'
B8 &string_107 # mov_eax, &string_107
50 # push_eax # '%ELF_shstr__shstr>ELF_shstr'
B8 &string_108 # mov_eax, &string_108
50 # push_eax # three_32 (global)
B8 &g_three_32 # mov_eax, &g_three_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # '&ELF_shstr'
B8 &string_109 # mov_eax, &string_109
50 # push_eax # '%ELF_shstr>ELF_base'
B8 &string_110 # mov_eax, &string_110
50 # push_eax # '%ELF_section_headers>ELF_shstr'
B8 &string_111 # mov_eax, &string_111
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # write_section (function)
B8 &f_write_section # mov_eax, &f_write_section
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 578
50 # push_eax # ':ELF_section_header_str'
B8 &string_112 # mov_eax, &string_112
50 # push_eax # '%ELF_shstr__str>ELF_shstr'
B8 &string_113 # mov_eax, &string_113
50 # push_eax # three_32 (global)
B8 &g_three_32 # mov_eax, &g_three_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # '&ELF_str'
B8 &string_114 # mov_eax, &string_114
50 # push_eax # '%ELF_str>ELF_base'
B8 &string_115 # mov_eax, &string_115
50 # push_eax # '%ELF_sym>ELF_str'
B8 &string_116 # mov_eax, &string_116
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # write_section (function)
B8 &f_write_section # mov_eax, &f_write_section
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 579
50 # push_eax # 64
B8 40000000 # mov_eax, %64
50 # push_eax # BITSIZE (global)
B8 &g_BITSIZE # mov_eax, &g_BITSIZE
8B00 # mov_eax,[eax] # ?
5B # pop_ebx # ==
39C3 # cmp_eax_ebx
0F94C0 # sete_al
0FB6C0 # movzx_eax,al
85C0 # test_eax,eax # if
58 # pop_eax
0F84 %_main_else25 # je %_main_else25
## blood-elf.c 579
50 # push_eax # ':ELF_section_header_sym'
B8 &string_117 # mov_eax, &string_117
50 # push_eax # '%ELF_shstr__sym>ELF_shstr'
B8 &string_118 # mov_eax, &string_118
50 # push_eax # two_32 (global)
B8 &g_two_32 # mov_eax, &g_two_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # '&ELF_sym'
B8 &string_119 # mov_eax, &string_119
50 # push_eax # '%ELF_sym>ELF_base'
B8 &string_120 # mov_eax, &string_120
50 # push_eax # '%ELF_end>ELF_sym'
B8 &string_121 # mov_eax, &string_121
50 # push_eax # three_32 (global)
B8 &g_three_32 # mov_eax, &g_three_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # count (global)
B8 &g_count # mov_eax, &g_count
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
50 # push_eax # twentyfour_32 (global)
B8 &g_twentyfour_32 # mov_eax, &g_twentyfour_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # write_section (function)
B8 &f_write_section # mov_eax, &f_write_section
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
E9 %_main_else_end25 # jmp %_main_else_end25
:_main_else25 #:_main_else25
## blood-elf.c 580
50 # push_eax # ':ELF_section_header_sym'
B8 &string_117 # mov_eax, &string_117
50 # push_eax # '%ELF_shstr__sym>ELF_shstr'
B8 &string_118 # mov_eax, &string_118
50 # push_eax # two_32 (global)
B8 &g_two_32 # mov_eax, &g_two_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # zero_32 (global)
B8 &g_zero_32 # mov_eax, &g_zero_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # '&ELF_sym'
B8 &string_119 # mov_eax, &string_119
50 # push_eax # '%ELF_sym>ELF_base'
B8 &string_120 # mov_eax, &string_120
50 # push_eax # '%ELF_end>ELF_sym'
B8 &string_121 # mov_eax, &string_121
50 # push_eax # three_32 (global)
B8 &g_three_32 # mov_eax, &g_three_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # count (global)
B8 &g_count # mov_eax, &g_count
8B00 # mov_eax,[eax] # ?
50 # push_eax # 4
B8 04000000 # mov_eax, %4
50 # push_eax # ByteMode (local)
8D85 14000000 # lea_eax,[ebp+DWORD] %20
8B00 # mov_eax,[eax] # ?
50 # push_eax # setup_string (function)
B8 &f_setup_string # mov_eax, &f_setup_string
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
50 # push_eax # sixteen_32 (global)
B8 &g_sixteen_32 # mov_eax, &g_sixteen_32
8B00 # mov_eax,[eax] # ?
50 # push_eax # write_section (function)
B8 &f_write_section # mov_eax, &f_write_section
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
:_main_else_end25 #:_main_else_end25
## blood-elf.c 583
50 # push_eax # jump_table (global)
B8 &g_jump_table # mov_eax, &g_jump_table
8B00 # mov_eax,[eax] # ?
50 # push_eax # output_string_table (function)
B8 &f_output_string_table # mov_eax, &f_output_string_table
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 584
50 # push_eax # jump_table (global)
B8 &g_jump_table # mov_eax, &g_jump_table
8B00 # mov_eax,[eax] # ?
50 # push_eax # output_symbol_table (function)
B8 &f_output_symbol_table # mov_eax, &f_output_symbol_table
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 585
50 # push_eax # '\n:ELF_end\n'
B8 &string_122 # mov_eax, &string_122
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fputs (function)
B8 &f_fputs # mov_eax, &f_fputs
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 588
50 # push_eax # output (global)
B8 &g_output # mov_eax, &g_output
8B00 # mov_eax,[eax] # ?
50 # push_eax # fclose (function)
B8 &f_fclose # mov_eax, &f_fclose
81C5 28000000 # add_ebp, %40 # ()
FFD0 # call_eax
81ED 28000000 # sub_ebp, %40
58 # pop_eax # ;
## blood-elf.c 590
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:f___init_globals__ #:f___init_globals__
58 # pop_eax
894500 # mov_[ebp],eax
58 # pop_eax
50 # push_eax # __sys_stdin (global)
B8 &g___sys_stdin # mov_eax, &g___sys_stdin
50 # push_eax # $ (dup)
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # __sys_stdout (global)
B8 &g___sys_stdout # mov_eax, &g___sys_stdout
50 # push_eax # $ (dup)
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # __sys_stderr (global)
B8 &g___sys_stderr # mov_eax, &g___sys_stderr
50 # push_eax # $ (dup)
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 4
B8 04000000 # mov_eax, %4
5B # pop_ebx # +
01D8 # add_eax,ebx
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # stdin (global)
B8 &g_stdin # mov_eax, &g_stdin
50 # push_eax # __sys_stdin (global)
B8 &g___sys_stdin # mov_eax, &g___sys_stdin
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # stdout (global)
B8 &g_stdout # mov_eax, &g_stdout
50 # push_eax # __sys_stdout (global)
B8 &g___sys_stdout # mov_eax, &g___sys_stdout
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # stderr (global)
B8 &g_stderr # mov_eax, &g_stderr
50 # push_eax # __sys_stderr (global)
B8 &g___sys_stderr # mov_eax, &g___sys_stderr
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # LINE_MACRO_OUTPUT_FORMAT_GCC (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_GCC # mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_GCC
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # LINE_MACRO_OUTPUT_FORMAT_NONE (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_NONE # mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_NONE
50 # push_eax # 1
B8 01000000 # mov_eax, %1
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # LINE_MACRO_OUTPUT_FORMAT_STD (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_STD # mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_STD
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # LINE_MACRO_OUTPUT_FORMAT_P10 (global)
B8 &g_LINE_MACRO_OUTPUT_FORMAT_P10 # mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_P10
50 # push_eax # 11
B8 0B000000 # mov_eax, %11
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # _sys_env (global)
B8 &g__sys_env # mov_eax, &g__sys_env
50 # push_eax # 0
B8 00000000 # mov_eax, %0
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # max_string (global)
B8 &g_max_string # mov_eax, &g_max_string
50 # push_eax # 4096
B8 00100000 # mov_eax, %4096
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # BINARY (global)
B8 &g_BINARY # mov_eax, &g_BINARY
50 # push_eax # 2
B8 02000000 # mov_eax, %2
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # OCTAL (global)
B8 &g_OCTAL # mov_eax, &g_OCTAL
50 # push_eax # 8
B8 08000000 # mov_eax, %8
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # HEX (global)
B8 &g_HEX # mov_eax, &g_HEX
50 # push_eax # 16
B8 10000000 # mov_eax, %16
5B # pop_ebx # =
8903 # mov_[ebx],eax
58 # pop_eax # ;
50 # push_eax # 0
B8 00000000 # mov_eax, %0
8B5D00 # mov_ebx,[ebp] # return
53 # push_ebx
C3 # ret
#
:ELF_data #:ELF_data
#
:SYS_MALLOC 00000000 #:SYS_MALLOC NULL
:string_0 5F5F7379735F7072696E7466202500 #:string_0 "__sys_printf %"
:string_1 2000 #:string_1 " "
:string_2 0A 00 #:string_2 !10 !0
:string_3 4D 6F 64 65 20 25 73 20 73 68 6F 75 6C 64 20 62 65 #:string_3 !77 !111 !100 !101 !32 !37 !115 !32 !115 !104 !111 !117 !108 !100 !32 !98 !101
20 27 72 2F 77 28 62 29 28 2B 29 27 2C 20 27 77 27 2C 20 6F # !32 !39 !114 !47 !119 !40 !98 !41 !40 !43 !41 !39 !44 !32 !39 !119 !39 !44 !32 !111
72 20 27 77 62 27 0A 00 # !114 !32 !39 !119 !98 !39 !10 !0
:string_4 66 6F 70 65 6E 20 25 73 20 25 73 20 72 65 74 75 72 #:string_4 !102 !111 !112 !101 !110 !32 !37 !115 !32 !37 !115 !32 !114 !101 !116 !117 !114
6E 65 64 20 25 64 0A 00 # !110 !101 !100 !32 !37 !100 !10 !0
:string_5 54 4F 44 4F 20 74 69 6D 65 0A 00 #:string_5 !84 !79 !68 !79 !32 !116 !105 !109 !101 !10 !0
:string_6 54 4F 44 4F 20 6C 6F 63 61 6C 74 69 6D 65 0A 00 #:string_6 !84 !79 !68 !79 !32 !108 !111 !99 !97 !108 !116 !105 !109 !101 !10 !0
:string_7 54 4F 44 4F 20 73 65 74 6A 6D 70 0A 00 #:string_7 !84 !79 !68 !79 !32 !115 !101 !116 !106 !109 !112 !10 !0
:string_8 54 4F 44 4F 20 6C 6F 6E 67 6A 6D 70 0A 00 #:string_8 !84 !79 !68 !79 !32 !108 !111 !110 !103 !106 !109 !112 !10 !0
:string_9 73 73 63 61 6E 66 3A 20 66 6F 72 6D 61 74 20 25 25 #:string_9 !115 !115 !99 !97 !110 !102 !58 !32 !102 !111 !114 !109 !97 !116 !32 !37 !37
25 63 20 6E 6F 74 20 73 75 70 70 6F 72 74 65 64 0A 00 # !37 !99 !32 !110 !111 !116 !32 !115 !117 !112 !112 !111 !114 !116 !101 !100 !10 !0
:string_10 54 4F 44 4F 20 61 74 6F 69 0A 00 #:string_10 !84 !79 !68 !79 !32 !97 !116 !111 !105 !10 !0
:string_11 54 4F 44 4F 20 65 78 65 63 76 70 0A 00 #:string_11 !84 !79 !68 !79 !32 !101 !120 !101 !99 !118 !112 !10 !0
:string_12 6162636465666768696A6B6C6D6E6F707172737475767778797A00 #:string_12 "abcdefghijklmnopqrstuvwxyz"
:string_13 30315F00 #:string_13 "01_"
:string_14 303132333435363738394142434445466162636465665F00 #:string_14 "0123456789ABCDEFabcdef_"
:string_15 30313233343536375F00 #:string_15 "01234567_"
:string_16 303132333435363738395F00 #:string_16 "0123456789_"
:string_17 69 6E 74 32 73 74 72 20 64 6F 65 73 6E 27 74 20 73 #:string_17 !105 !110 !116 !50 !115 !116 !114 !32 !100 !111 !101 !115 !110 !39 !116 !32 !115
75 70 70 6F 72 74 20 61 20 62 61 73 65 20 6C 65 73 73 20 74 # !117 !112 !112 !111 !114 !116 !32 !97 !32 !98 !97 !115 !101 !32 !108 !101 !115 !115 !32 !116
68 61 6E 20 32 0A 00 # !104 !97 !110 !32 !50 !10 !0
:string_18 69 6E 74 32 73 74 72 20 64 6F 65 73 6E 27 74 20 73 #:string_18 !105 !110 !116 !50 !115 !116 !114 !32 !100 !111 !101 !115 !110 !39 !116 !32 !115
75 70 70 6F 72 74 20 61 20 62 61 73 65 20 6D 6F 72 65 20 74 # !117 !112 !112 !111 !114 !116 !32 !97 !32 !98 !97 !115 !101 !32 !109 !111 !114 !101 !32 !116
68 61 6E 20 33 36 0A 00 # !104 !97 !110 !32 !51 !54 !10 !0
:string_19 303132333435363738394142434445464748494A4B4C4D4E4F505152535455565758595A00 #:string_19 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
:string_20 2D3231343734383336343800 #:string_20 "-2147483648"
:string_21 43 61 6E 20 6E 6F 74 20 68 61 76 65 20 61 6E 20 45 #:string_21 !67 !97 !110 !32 !110 !111 !116 !32 !104 !97 !118 !101 !32 !97 !110 !32 !69
4F 46 20 74 6F 6B 65 6E 0A 00 # !79 !70 !32 !116 !111 !107 !101 !110 !10 !0
:string_22 54 6F 6B 65 6E 20 65 78 63 65 65 64 73 20 74 6F 6B #:string_22 !84 !111 !107 !101 !110 !32 !101 !120 !99 !101 !101 !100 !115 !32 !116 !111 !107
65 6E 20 6C 65 6E 67 74 68 20 72 65 73 74 72 69 63 74 69 6F # !101 !110 !32 !108 !101 !110 !103 !116 !104 !32 !114 !101 !115 !116 !114 !105 !99 !116 !105 !111
6E 0A 00 # !110 !10 !0
:string_23 20 09 0A 3E 00 #:string_23 !32 !9 !10 !62 !0
:string_24 0A 0D 00 #:string_24 !10 !13 !0
:string_25 7200 #:string_25 "r"
:string_26 5468652066696C653A2000 #:string_26 "The file: "
:string_27 20 63 61 6E 20 6E 6F 74 20 62 65 20 6F 70 65 6E 65 #:string_27 !32 !99 !97 !110 !32 !110 !111 !116 !32 !98 !101 !32 !111 !112 !101 !110 !101
64 21 0A 00 # !100 !33 !10 !0
:string_28 0A 23 20 47 65 6E 65 72 61 74 65 64 20 73 74 72 69 #:string_28 !10 !35 !32 !71 !101 !110 !101 !114 !97 !116 !101 !100 !32 !115 !116 !114 !105
6E 67 20 74 61 62 6C 65 0A 3A 45 4C 46 5F 73 74 72 0A 00 # !110 !103 !32 !116 !97 !98 !108 !101 !10 !58 !69 !76 !70 !95 !115 !116 !114 !10 !0
:string_29 09 23 20 4E 55 4C 4C 20 73 74 72 69 6E 67 0A 00 #:string_29 !9 !35 !32 !78 !85 !76 !76 !32 !115 !116 !114 !105 !110 !103 !10 !0
:string_30 3A454C465F7374725F00 #:string_30 ":ELF_str_"
:string_31 09 22 00 #:string_31 !9 !34 !0
:string_32 22 20 23 20 22 00 #:string_32 !34 !32 !35 !32 !34 !0
:string_33 5C6E00 #:string_33 "\n"
:string_34 5C7400 #:string_34 "\t"
:string_35 22 0A 00 #:string_35 !34 !10 !0
:string_36 23 20 45 4E 44 20 47 65 6E 65 72 61 74 65 64 20 73 #:string_36 !35 !32 !69 !78 !68 !32 !71 !101 !110 !101 !114 !97 !116 !101 !100 !32 !115
74 72 69 6E 67 20 74 61 62 6C 65 0A 0A 00 # !116 !114 !105 !110 !103 !32 !116 !97 !98 !108 !101 !10 !10 !0
:string_37 0A 23 20 47 65 6E 65 72 61 74 65 64 20 73 79 6D 62 #:string_37 !10 !35 !32 !71 !101 !110 !101 !114 !97 !116 !101 !100 !32 !115 !121 !109 !98
6F 6C 20 74 61 62 6C 65 0A 3A 45 4C 46 5F 73 79 6D 0A 23 20 # !111 !108 !32 !116 !97 !98 !108 !101 !10 !58 !69 !76 !70 !95 !115 !121 !109 !10 !35 !32
52 65 71 75 69 72 65 64 20 4E 55 4C 4C 20 73 79 6D 62 6F 6C # !82 !101 !113 !117 !105 !114 !101 !100 !32 !78 !85 !76 !76 !32 !115 !121 !109 !98 !111 !108
20 65 6E 74 72 79 0A 00 # !32 !101 !110 !116 !114 !121 !10 !0
:string_38 09 23 20 73 74 5F 6E 61 6D 65 0A 00 #:string_38 !9 !35 !32 !115 !116 !95 !110 !97 !109 !101 !10 !0
:string_39 09 23 20 73 74 5F 69 6E 66 6F 0A 00 #:string_39 !9 !35 !32 !115 !116 !95 !105 !110 !102 !111 !10 !0
:string_40 09 23 20 73 74 5F 6F 74 68 65 72 0A 00 #:string_40 !9 !35 !32 !115 !116 !95 !111 !116 !104 !101 !114 !10 !0
:string_41 09 23 20 73 74 5F 73 68 6E 64 78 0A 00 #:string_41 !9 !35 !32 !115 !116 !95 !115 !104 !110 !100 !120 !10 !0
:string_42 09 23 20 73 74 5F 76 61 6C 75 65 0A 00 #:string_42 !9 !35 !32 !115 !116 !95 !118 !97 !108 !117 !101 !10 !0
:string_43 09 23 20 73 74 5F 73 69 7A 65 0A 0A 00 #:string_43 !9 !35 !32 !115 !116 !95 !115 !105 !122 !101 !10 !10 !0
:string_44 09 23 20 73 74 5F 73 69 7A 65 0A 00 #:string_44 !9 !35 !32 !115 !116 !95 !115 !105 !122 !101 !10 !0
:string_45 09 23 20 73 74 5F 73 68 6E 64 78 0A 0A 00 #:string_45 !9 !35 !32 !115 !116 !95 !115 !104 !110 !100 !120 !10 !10 !0
:string_46 25454C465F7374725F00 #:string_46 "%ELF_str_"
:string_47 3E 45 4C 46 5F 73 74 72 09 23 20 73 74 5F 6E 61 6D #:string_47 !62 !69 !76 !70 !95 !115 !116 !114 !9 !35 !32 !115 !116 !95 !110 !97 !109
65 0A 00 # !101 !10 !0
:string_48 09 23 20 73 74 5F 69 6E 66 6F 20 28 46 55 4E 43 29 #:string_48 !9 !35 !32 !115 !116 !95 !105 !110 !102 !111 !32 !40 !70 !85 !78 !67 !41
0A 00 # !10 !0
:string_49 09 23 20 73 74 5F 6F 74 68 65 72 20 28 68 69 64 64 #:string_49 !9 !35 !32 !115 !116 !95 !111 !116 !104 !101 !114 !32 !40 !104 !105 !100 !100
65 6E 29 0A 00 # !101 !110 !41 !10 !0
:string_50 09 23 20 73 74 5F 6F 74 68 65 72 20 28 6F 74 68 65 #:string_50 !9 !35 !32 !115 !116 !95 !111 !116 !104 !101 !114 !32 !40 !111 !116 !104 !101
72 29 0A 00 # !114 !41 !10 !0
:string_51 2600 #:string_51 "&"
:string_52 09 23 20 73 74 5F 73 69 7A 65 20 28 75 6E 6B 6E 6F #:string_52 !9 !35 !32 !115 !116 !95 !115 !105 !122 !101 !32 !40 !117 !110 !107 !110 !111
77 6E 20 73 69 7A 65 29 0A 0A 00 # !119 !110 !32 !115 !105 !122 !101 !41 !10 !10 !0
:string_53 09 23 73 74 5F 76 61 6C 75 65 0A 00 #:string_53 !9 !35 !115 !116 !95 !118 !97 !108 !117 !101 !10 !0
:string_54 09 23 20 73 74 5F 73 69 7A 65 20 28 75 6E 6B 6E 6F #:string_54 !9 !35 !32 !115 !116 !95 !115 !105 !122 !101 !32 !40 !117 !110 !107 !110 !111
77 6E 20 73 69 7A 65 29 0A 00 # !119 !110 !32 !115 !105 !122 !101 !41 !10 !0
:string_55 09 23 20 73 74 5F 6F 74 68 65 72 20 28 64 65 66 61 #:string_55 !9 !35 !32 !115 !116 !95 !111 !116 !104 !101 !114 !32 !40 !100 !101 !102 !97
75 6C 74 29 0A 00 # !117 !108 !116 !41 !10 !0
:string_56 23 20 45 4E 44 20 47 65 6E 65 72 61 74 65 64 20 73 #:string_56 !35 !32 !69 !78 !68 !32 !71 !101 !110 !101 !114 !97 !116 !101 !100 !32 !115
79 6D 62 6F 6C 20 74 61 62 6C 65 0A 00 # !121 !109 !98 !111 !108 !32 !116 !97 !98 !108 !101 !10 !0
:string_57 09 23 00 #:string_57 !9 !35 !0
:string_58 73685F6E616D6500 #:string_58 "sh_name"
:string_59 73685F7479706500 #:string_59 "sh_type"
:string_60 73685F666C61677300 #:string_60 "sh_flags"
:string_61 73685F6164647200 #:string_61 "sh_addr"
:string_62 73685F6F666673657400 #:string_62 "sh_offset"
:string_63 73685F73697A6500 #:string_63 "sh_size"
:string_64 73685F6C696E6B00 #:string_64 "sh_link"
:string_65 09 23 73 68 5F 69 6E 66 6F 0A 00 #:string_65 !9 !35 !115 !104 !95 !105 !110 !102 !111 !10 !0
:string_66 09 23 73 68 5F 61 64 64 72 61 6C 69 67 6E 0A 00 #:string_66 !9 !35 !115 !104 !95 !97 !100 !100 !114 !97 !108 !105 !103 !110 !10 !0
:string_67 73685F656E7473697A6500 #:string_67 "sh_entsize"
:string_68 45 78 68 61 75 73 74 65 64 20 61 76 61 69 6C 61 62 #:string_68 !69 !120 !104 !97 !117 !115 !116 !101 !100 !32 !97 !118 !97 !105 !108 !97 !98
6C 65 20 6D 65 6D 6F 72 79 0A 00 # !108 !101 !32 !109 !101 !109 !111 !114 !121 !10 !0
:string_69 72 65 61 63 68 65 64 20 69 6D 70 6F 73 73 69 62 6C #:string_69 !114 !101 !97 !99 !104 !101 !100 !32 !105 !109 !112 !111 !115 !115 !105 !98 !108
65 20 6D 6F 64 65 0A 00 # !101 !32 !109 !111 !100 !101 !10 !0
:string_70 00 #:string_70 ""
:string_71 2D6800 #:string_71 "-h"
:string_72 2D2D68656C7000 #:string_72 "--help"
:string_73 55736167653A2000 #:string_73 "Usage: "
:string_74 20 2D 2D 66 69 6C 65 20 46 49 4C 45 4E 41 4D 45 31 #:string_74 !32 !45 !45 !102 !105 !108 !101 !32 !70 !73 !76 !69 !78 !65 !77 !69 !49
20 7B 2D 2D 66 69 6C 65 20 46 49 4C 45 4E 41 4D 45 32 7D 20 # !32 !123 !45 !45 !102 !105 !108 !101 !32 !70 !73 !76 !69 !78 !65 !77 !69 !50 !125 !32
2D 2D 6F 75 74 70 75 74 20 46 49 4C 45 4E 41 4D 45 0A 00 # !45 !45 !111 !117 !116 !112 !117 !116 !32 !70 !73 !76 !69 !78 !65 !77 !69 !10 !0
:string_75 2D2D363400 #:string_75 "--64"
:string_76 2D6600 #:string_76 "-f"
:string_77 2D2D66696C6500 #:string_77 "--file"
:string_78 2D6F00 #:string_78 "-o"
:string_79 2D2D6F757470757400 #:string_79 "--output"
:string_80 7700 #:string_80 "w"
:string_81 2D6200 #:string_81 "-b"
:string_82 2D2D62696E61727900 #:string_82 "--binary"
:string_83 2D4F00 #:string_83 "-O"
:string_84 2D2D6F6374616C00 #:string_84 "--octal"
:string_85 2D5800 #:string_85 "-X"
:string_86 2D2D68657800 #:string_86 "--hex"
:string_87 2D2D6269672D656E6469616E00 #:string_87 "--big-endian"
:string_88 2D2D6C6974746C652D656E6469616E00 #:string_88 "--little-endian"
:string_89 2D5600 #:string_89 "-V"
:string_90 2D2D76657273696F6E00 #:string_90 "--version"
:string_91 62 6C 6F 6F 64 2D 65 6C 66 20 32 2E 30 2E 31 0A 28 #:string_91 !98 !108 !111 !111 !100 !45 !101 !108 !102 !32 !50 !46 !48 !46 !49 !10 !40
42 61 73 69 63 61 6C 6C 79 20 4C 61 75 6E 63 68 65 73 20 4F # !66 !97 !115 !105 !99 !97 !108 !108 !121 !32 !76 !97 !117 !110 !99 !104 !101 !115 !32 !79
64 64 20 4F 62 6A 65 63 74 20 44 75 6D 70 20 45 78 65 63 75 # !100 !100 !32 !79 !98 !106 !101 !99 !116 !32 !68 !117 !109 !112 !32 !69 !120 !101 !99 !117
74 61 62 4C 65 20 46 69 6C 65 73 0A 00 # !116 !97 !98 !76 !101 !32 !70 !105 !108 !101 !115 !10 !0
:string_92 2D2D656E74727900 #:string_92 "--entry"
:string_93 55 6E 6B 6E 6F 77 6E 20 6F 70 74 69 6F 6E 0A 00 #:string_93 !85 !110 !107 !110 !111 !119 !110 !32 !111 !112 !116 !105 !111 !110 !10 !0
:string_94 65 69 74 68 65 72 20 2D 2D 6C 69 74 74 6C 65 2D 65 #:string_94 !101 !105 !116 !104 !101 !114 !32 !45 !45 !108 !105 !116 !116 !108 !101 !45 !101
6E 64 69 61 6E 20 6F 72 20 2D 2D 62 69 67 2D 65 6E 64 69 61 # !110 !100 !105 !97 !110 !32 !111 !114 !32 !45 !45 !98 !105 !103 !45 !101 !110 !100 !105 !97
6E 20 4D 55 53 54 20 62 65 20 73 65 74 0A 00 # !110 !32 !77 !85 !83 !84 !32 !98 !101 !32 !115 !101 !116 !10 !0
:string_95 23 20 47 65 6E 65 72 61 74 65 64 20 73 65 63 74 69 #:string_95 !35 !32 !71 !101 !110 !101 !114 !97 !116 !101 !100 !32 !115 !101 !99 !116 !105
6F 6E 73 0A 3A 45 4C 46 5F 73 68 73 74 72 0A 00 # !111 !110 !115 !10 !58 !69 !76 !70 !95 !115 !104 !115 !116 !114 !10 !0
:string_96 09 23 20 4E 55 4C 4C 0A 00 #:string_96 !9 !35 !32 !78 !85 !76 !76 !10 !0
:string_97 3A 45 4C 46 5F 73 68 73 74 72 5F 5F 74 65 78 74 0A #:string_97 !58 !69 !76 !70 !95 !115 !104 !115 !116 !114 !95 !95 !116 !101 !120 !116 !10
22 2E 74 65 78 74 22 0A 00 # !34 !46 !116 !101 !120 !116 !34 !10 !0
:string_98 3A 45 4C 46 5F 73 68 73 74 72 5F 5F 73 68 73 74 72 #:string_98 !58 !69 !76 !70 !95 !115 !104 !115 !116 !114 !95 !95 !115 !104 !115 !116 !114
0A 22 2E 73 68 73 74 72 74 61 62 22 0A 00 # !10 !34 !46 !115 !104 !115 !116 !114 !116 !97 !98 !34 !10 !0
:string_99 3A 45 4C 46 5F 73 68 73 74 72 5F 5F 73 79 6D 0A 22 #:string_99 !58 !69 !76 !70 !95 !115 !104 !115 !116 !114 !95 !95 !115 !121 !109 !10 !34
2E 73 79 6D 74 61 62 22 0A 00 # !46 !115 !121 !109 !116 !97 !98 !34 !10 !0
:string_100 3A 45 4C 46 5F 73 68 73 74 72 5F 5F 73 74 72 0A 22 #:string_100 !58 !69 !76 !70 !95 !115 !104 !115 !116 !114 !95 !95 !115 !116 !114 !10 !34
2E 73 74 72 74 61 62 22 0A 00 # !46 !115 !116 !114 !116 !97 !98 !34 !10 !0
:string_101 3A454C465F73656374696F6E5F6865616465727300 #:string_101 ":ELF_section_headers"
:string_102 3A454C465F73656374696F6E5F6865616465725F7465787400 #:string_102 ":ELF_section_header_text"
:string_103 25454C465F73687374725F5F746578743E454C465F736873747200 #:string_103 "%ELF_shstr__text>ELF_shstr"
:string_104 26454C465F7465787400 #:string_104 "&ELF_text"
:string_105 25454C465F746578743E454C465F6261736500 #:string_105 "%ELF_text>ELF_base"
:string_106 25454C465F646174613E454C465F7465787400 #:string_106 "%ELF_data>ELF_text"
:string_107 3A454C465F73656374696F6E5F6865616465725F736873747200 #:string_107 ":ELF_section_header_shstr"
:string_108 25454C465F73687374725F5F73687374723E454C465F736873747200 #:string_108 "%ELF_shstr__shstr>ELF_shstr"
:string_109 26454C465F736873747200 #:string_109 "&ELF_shstr"
:string_110 25454C465F73687374723E454C465F6261736500 #:string_110 "%ELF_shstr>ELF_base"
:string_111 25454C465F73656374696F6E5F686561646572733E454C465F736873747200 #:string_111 "%ELF_section_headers>ELF_shstr"
:string_112 3A454C465F73656374696F6E5F6865616465725F73747200 #:string_112 ":ELF_section_header_str"
:string_113 25454C465F73687374725F5F7374723E454C465F736873747200 #:string_113 "%ELF_shstr__str>ELF_shstr"
:string_114 26454C465F73747200 #:string_114 "&ELF_str"
:string_115 25454C465F7374723E454C465F6261736500 #:string_115 "%ELF_str>ELF_base"
:string_116 25454C465F73796D3E454C465F73747200 #:string_116 "%ELF_sym>ELF_str"
:string_117 3A454C465F73656374696F6E5F6865616465725F73796D00 #:string_117 ":ELF_section_header_sym"
:string_118 25454C465F73687374725F5F73796D3E454C465F736873747200 #:string_118 "%ELF_shstr__sym>ELF_shstr"
:string_119 26454C465F73796D00 #:string_119 "&ELF_sym"
:string_120 25454C465F73796D3E454C465F6261736500 #:string_120 "%ELF_sym>ELF_base"
:string_121 25454C465F656E643E454C465F73796D00 #:string_121 "%ELF_end>ELF_sym"
:string_122 0A 3A 45 4C 46 5F 65 6E 64 0A 00 #:string_122 !10 !58 !69 !76 !70 !95 !101 !110 !100 !10 !0
:g___sys_stdin #:g___sys_stdin
00000000 00000000 # NULL NULL
:g___sys_stdout #:g___sys_stdout
00000000 00000000 # NULL NULL
:g___sys_stderr #:g___sys_stderr
00000000 00000000 # NULL NULL
:g_stdin #:g_stdin
00000000 # NULL
:g_stdout #:g_stdout
00000000 # NULL
:g_stderr #:g_stderr
00000000 # NULL
:g_errno #:g_errno
00000000 # NULL
:g_LINE_MACRO_OUTPUT_FORMAT_GCC #:g_LINE_MACRO_OUTPUT_FORMAT_GCC
00000000 # NULL
:g_LINE_MACRO_OUTPUT_FORMAT_NONE #:g_LINE_MACRO_OUTPUT_FORMAT_NONE
00000000 # NULL
:g_LINE_MACRO_OUTPUT_FORMAT_STD #:g_LINE_MACRO_OUTPUT_FORMAT_STD
00000000 # NULL
:g_LINE_MACRO_OUTPUT_FORMAT_P10 #:g_LINE_MACRO_OUTPUT_FORMAT_P10
00000000 # NULL
:g__sys_env #:g__sys_env
00000000 # NULL
:g_max_string #:g_max_string
00000000 # NULL
:g_BITSIZE #:g_BITSIZE
00000000 # NULL
:g_BigEndian #:g_BigEndian
00000000 # NULL
:g_BINARY #:g_BINARY
00000000 # NULL
:g_OCTAL #:g_OCTAL
00000000 # NULL
:g_HEX #:g_HEX
00000000 # NULL
:g_zero_8 #:g_zero_8
00000000 # NULL
:g_zero_16 #:g_zero_16
00000000 # NULL
:g_zero_32 #:g_zero_32
00000000 # NULL
:g_one_16 #:g_one_16
00000000 # NULL
:g_one_32 #:g_one_32
00000000 # NULL
:g_two_8 #:g_two_8
00000000 # NULL
:g_two_32 #:g_two_32
00000000 # NULL
:g_three_32 #:g_three_32
00000000 # NULL
:g_six_32 #:g_six_32
00000000 # NULL
:g_sixteen_32 #:g_sixteen_32
00000000 # NULL
:g_twentyfour_32 #:g_twentyfour_32
00000000 # NULL
:g_output #:g_output
00000000 # NULL
:g_jump_table #:g_jump_table
00000000 # NULL
:g_count #:g_count
00000000 # NULL
:g_entry #:g_entry
00000000 # NULL
#
:ELF_end #:ELF_end
# Generated sections :ELF_shstr 00 # NULL :ELF_shstr__text ".text" :ELF_shstr__shstr ".shstrtab" :ELF_shstr__sym ".symtab" :ELF_shstr__str ".strtab" :ELF_section_headers 00000000 #sh_name 00000000 #sh_type 00000000 #sh_flags 00000000 #sh_addr 00000000 #sh_offset 00000000 #sh_size 00000000 #sh_link 00000000 #sh_info 01000000 #sh_addralign 00000000 #sh_entsize :ELF_section_header_text %ELF_shstr__text>ELF_shstr #sh_name 01000000 #sh_type 06000000 #sh_flags &ELF_text #sh_addr %ELF_text>ELF_base #sh_offset %ELF_data>ELF_text #sh_size 00000000 #sh_link 00000000 #sh_info 01000000 #sh_addralign 00000000 #sh_entsize :ELF_section_header_shstr %ELF_shstr__shstr>ELF_shstr #sh_name 03000000 #sh_type 00000000 #sh_flags &ELF_shstr #sh_addr %ELF_shstr>ELF_base #sh_offset %ELF_section_headers>ELF_shstr #sh_size 00000000 #sh_link 00000000 #sh_info 01000000 #sh_addralign 00000000 #sh_entsize :ELF_section_header_str %ELF_shstr__str>ELF_shstr #sh_name 03000000 #sh_type 00000000 #sh_flags &ELF_str #sh_addr %ELF_str>ELF_base #sh_offset %ELF_sym>ELF_str #sh_size 00000000 #sh_link 00000000 #sh_info 01000000 #sh_addralign 00000000 #sh_entsize :ELF_section_header_sym %ELF_shstr__sym>ELF_shstr #sh_name 02000000 #sh_type 00000000 #sh_flags &ELF_sym #sh_addr %ELF_sym>ELF_base #sh_offset %ELF_end>ELF_sym #sh_size 03000000 #sh_link 66020000 #sh_info 01000000 #sh_addralign 10000000 #sh_entsize # Generated string table :ELF_str 00 # NULL string :ELF_str_ELF_text "ELF_text" # "ELF_text" :ELF_str__start "_start" # "_start" :ELF_str_f_sys_int80 "f_sys_int80" # "f_sys_int80" :ELF_str_f_sys_malloc "f_sys_malloc" # "f_sys_malloc" :ELF_str_SYS_MALLOC "SYS_MALLOC" # "SYS_MALLOC" :ELF_str_f_exit "f_exit" # "f_exit" :ELF_str_f_memcpy "f_memcpy" # "f_memcpy" :ELF_str__memcpy_loop1 "_memcpy_loop1" # "_memcpy_loop1" :ELF_str__memcpy_else2 "_memcpy_else2" # "_memcpy_else2" :ELF_str__memcpy_loop_end1 "_memcpy_loop_end1" # "_memcpy_loop_end1" :ELF_str_f_memmove "f_memmove" # "f_memmove" :ELF_str__memmove_loop2 "_memmove_loop2" # "_memmove_loop2" :ELF_str__memmove_else3 "_memmove_else3" # "_memmove_else3" :ELF_str__memmove_loop_end2 "_memmove_loop_end2" # "_memmove_loop_end2" :ELF_str__memmove_else1 "_memmove_else1" # "_memmove_else1" :ELF_str__memmove_loop5 "_memmove_loop5" # "_memmove_loop5" :ELF_str__memmove_else6 "_memmove_else6" # "_memmove_else6" :ELF_str__memmove_loop_end5 "_memmove_loop_end5" # "_memmove_loop_end5" :ELF_str__memmove_else4 "_memmove_else4" # "_memmove_else4" :ELF_str__memmove_else_end1 "_memmove_else_end1" # "_memmove_else_end1" :ELF_str_f_memset "f_memset" # "f_memset" :ELF_str__memset_loop1 "_memset_loop1" # "_memset_loop1" :ELF_str__memset_else2 "_memset_else2" # "_memset_else2" :ELF_str__memset_loop_end1 "_memset_loop_end1" # "_memset_loop_end1" :ELF_str_f_memcmp "f_memcmp" # "f_memcmp" :ELF_str__memcmp_loop1 "_memcmp_loop1" # "_memcmp_loop1" :ELF_str__memcmp_else2 "_memcmp_else2" # "_memcmp_else2" :ELF_str__memcmp_else3 "_memcmp_else3" # "_memcmp_else3" :ELF_str__memcmp_loop_end1 "_memcmp_loop_end1" # "_memcmp_loop_end1" :ELF_str_f_strlen "f_strlen" # "f_strlen" :ELF_str__strlen_loop1 "_strlen_loop1" # "_strlen_loop1" :ELF_str__strlen_else2 "_strlen_else2" # "_strlen_else2" :ELF_str__strlen_loop_end1 "_strlen_loop_end1" # "_strlen_loop_end1" :ELF_str_f_strcpy "f_strcpy" # "f_strcpy" :ELF_str__strcpy_loop1 "_strcpy_loop1" # "_strcpy_loop1" :ELF_str__strcpy_else2 "_strcpy_else2" # "_strcpy_else2" :ELF_str__strcpy_loop_end1 "_strcpy_loop_end1" # "_strcpy_loop_end1" :ELF_str_f_strncpy "f_strncpy" # "f_strncpy" :ELF_str__strncpy_loop1 "_strncpy_loop1" # "_strncpy_loop1" :ELF_str__strncpy_else2 "_strncpy_else2" # "_strncpy_else2" :ELF_str__strncpy_else3 "_strncpy_else3" # "_strncpy_else3" :ELF_str__strncpy_loop_end1 "_strncpy_loop_end1" # "_strncpy_loop_end1" :ELF_str_f_strcat "f_strcat" # "f_strcat" :ELF_str_f_strchr "f_strchr" # "f_strchr" :ELF_str__strchr_loop1 "_strchr_loop1" # "_strchr_loop1" :ELF_str__strchr_else2 "_strchr_else2" # "_strchr_else2" :ELF_str__strchr_else3 "_strchr_else3" # "_strchr_else3" :ELF_str__strchr_loop_end1 "_strchr_loop_end1" # "_strchr_loop_end1" :ELF_str__strchr_else4 "_strchr_else4" # "_strchr_else4" :ELF_str__strchr_else_end4 "_strchr_else_end4" # "_strchr_else_end4" :ELF_str_f_strrchr "f_strrchr" # "f_strrchr" :ELF_str__strrchr_loop1 "_strrchr_loop1" # "_strrchr_loop1" :ELF_str__strrchr_else2 "_strrchr_else2" # "_strrchr_else2" :ELF_str__strrchr_else3 "_strrchr_else3" # "_strrchr_else3" :ELF_str__strrchr_loop_end1 "_strrchr_loop_end1" # "_strrchr_loop_end1" :ELF_str_f_strcmp "f_strcmp" # "f_strcmp" :ELF_str__strcmp_loop1 "_strcmp_loop1" # "_strcmp_loop1" :ELF_str__strcmp_or_end2 "_strcmp_or_end2" # "_strcmp_or_end2" :ELF_str__strcmp_else3 "_strcmp_else3" # "_strcmp_else3" :ELF_str__strcmp_loop_end1 "_strcmp_loop_end1" # "_strcmp_loop_end1" :ELF_str_f_strncmp "f_strncmp" # "f_strncmp" :ELF_str__strncmp_loop1 "_strncmp_loop1" # "_strncmp_loop1" :ELF_str__strncmp_else2 "_strncmp_else2" # "_strncmp_else2" :ELF_str__strncmp_or_end3 "_strncmp_or_end3" # "_strncmp_or_end3" :ELF_str__strncmp_else4 "_strncmp_else4" # "_strncmp_else4" :ELF_str__strncmp_loop_end1 "_strncmp_loop_end1" # "_strncmp_loop_end1" :ELF_str_f_strstr "f_strstr" # "f_strstr" :ELF_str__strstr_loop1 "_strstr_loop1" # "_strstr_loop1" :ELF_str__strstr_else2 "_strstr_else2" # "_strstr_else2" :ELF_str__strstr_else3 "_strstr_else3" # "_strstr_else3" :ELF_str__strstr_loop_end1 "_strstr_loop_end1" # "_strstr_loop_end1" :ELF_str_f_strtoul "f_strtoul" # "f_strtoul" :ELF_str__strtoul_or_end3 "_strtoul_or_end3" # "_strtoul_or_end3" :ELF_str__strtoul_else4 "_strtoul_else4" # "_strtoul_else4" :ELF_str__strtoul_else2 "_strtoul_else2" # "_strtoul_else2" :ELF_str__strtoul_else1 "_strtoul_else1" # "_strtoul_else1" :ELF_str__strtoul_else5 "_strtoul_else5" # "_strtoul_else5" :ELF_str__strtoul_else_end5 "_strtoul_else_end5" # "_strtoul_else_end5" :ELF_str__strtoul_loop6 "_strtoul_loop6" # "_strtoul_loop6" :ELF_str__strtoul_and_end7 "_strtoul_and_end7" # "_strtoul_and_end7" :ELF_str__strtoul_else8 "_strtoul_else8" # "_strtoul_else8" :ELF_str__strtoul_and_end9 "_strtoul_and_end9" # "_strtoul_and_end9" :ELF_str__strtoul_else10 "_strtoul_else10" # "_strtoul_else10" :ELF_str__strtoul_and_end11 "_strtoul_and_end11" # "_strtoul_and_end11" :ELF_str__strtoul_else12 "_strtoul_else12" # "_strtoul_else12" :ELF_str__strtoul_else_end12 "_strtoul_else_end12" # "_strtoul_else_end12" :ELF_str__strtoul_else_end10 "_strtoul_else_end10" # "_strtoul_else_end10" :ELF_str__strtoul_else_end8 "_strtoul_else_end8" # "_strtoul_else_end8" :ELF_str__strtoul_loop_end6 "_strtoul_loop_end6" # "_strtoul_loop_end6" :ELF_str__strtoul_else13 "_strtoul_else13" # "_strtoul_else13" :ELF_str_f_strtol "f_strtol" # "f_strtol" :ELF_str__strtol_else1 "_strtol_else1" # "_strtol_else1" :ELF_str_f_strtoll "f_strtoll" # "f_strtoll" :ELF_str_f_strtoull "f_strtoull" # "f_strtoull" :ELF_str_f_strtof "f_strtof" # "f_strtof" :ELF_str_f_malloc "f_malloc" # "f_malloc" :ELF_str_f_realloc "f_realloc" # "f_realloc" :ELF_str__realloc_loop2 "_realloc_loop2" # "_realloc_loop2" :ELF_str__realloc_else3 "_realloc_else3" # "_realloc_else3" :ELF_str__realloc_loop_end2 "_realloc_loop_end2" # "_realloc_loop_end2" :ELF_str__realloc_else1 "_realloc_else1" # "_realloc_else1" :ELF_str_f_calloc "f_calloc" # "f_calloc" :ELF_str__calloc_loop1 "_calloc_loop1" # "_calloc_loop1" :ELF_str__calloc_else2 "_calloc_else2" # "_calloc_else2" :ELF_str__calloc_loop_end1 "_calloc_loop_end1" # "_calloc_loop_end1" :ELF_str_f_free "f_free" # "f_free" :ELF_str_f_fwrite "f_fwrite" # "f_fwrite" :ELF_str_f_fputc "f_fputc" # "f_fputc" :ELF_str_f_fputs "f_fputs" # "f_fputs" :ELF_str_f___sys_printf "f___sys_printf" # "f___sys_printf" :ELF_str____sys_printf_loop1 "___sys_printf_loop1" # "___sys_printf_loop1" :ELF_str____sys_printf_else2 "___sys_printf_else2" # "___sys_printf_else2" :ELF_str____sys_printf_else4 "___sys_printf_else4" # "___sys_printf_else4" :ELF_str____sys_printf_else5 "___sys_printf_else5" # "___sys_printf_else5" :ELF_str____sys_printf_else_end4 "___sys_printf_else_end4" # "___sys_printf_else_end4" :ELF_str____sys_printf_else6 "___sys_printf_else6" # "___sys_printf_else6" :ELF_str____sys_printf_else3 "___sys_printf_else3" # "___sys_printf_else3" :ELF_str____sys_printf_else8 "___sys_printf_else8" # "___sys_printf_else8" :ELF_str____sys_printf_else10 "___sys_printf_else10" # "___sys_printf_else10" :ELF_str____sys_printf_else11 "___sys_printf_else11" # "___sys_printf_else11" :ELF_str____sys_printf_loop12 "___sys_printf_loop12" # "___sys_printf_loop12" :ELF_str____sys_printf_and_end13 "___sys_printf_and_end13" # "___sys_printf_and_end13" :ELF_str____sys_printf_else14 "___sys_printf_else14" # "___sys_printf_else14" :ELF_str____sys_printf_loop_end12 "___sys_printf_loop_end12" # "___sys_printf_loop_end12" :ELF_str____sys_printf_else15 "___sys_printf_else15" # "___sys_printf_else15" :ELF_str____sys_printf_else17 "___sys_printf_else17" # "___sys_printf_else17" :ELF_str____sys_printf_else18 "___sys_printf_else18" # "___sys_printf_else18" :ELF_str____sys_printf_loop19 "___sys_printf_loop19" # "___sys_printf_loop19" :ELF_str____sys_printf_else20 "___sys_printf_else20" # "___sys_printf_else20" :ELF_str____sys_printf_loop_end19 "___sys_printf_loop_end19" # "___sys_printf_loop_end19" :ELF_str____sys_printf_else21 "___sys_printf_else21" # "___sys_printf_else21" :ELF_str____sys_printf_else_end17 "___sys_printf_else_end17" # "___sys_printf_else_end17" :ELF_str____sys_printf_loop25 "___sys_printf_loop25" # "___sys_printf_loop25" :ELF_str____sys_printf_else26 "___sys_printf_else26" # "___sys_printf_else26" :ELF_str____sys_printf_else27 "___sys_printf_else27" # "___sys_printf_else27" :ELF_str____sys_printf_else_end27 "___sys_printf_else_end27" # "___sys_printf_else_end27" :ELF_str____sys_printf_loop_end25 "___sys_printf_loop_end25" # "___sys_printf_loop_end25" :ELF_str____sys_printf_else24 "___sys_printf_else24" # "___sys_printf_else24" :ELF_str____sys_printf_loop28 "___sys_printf_loop28" # "___sys_printf_loop28" :ELF_str____sys_printf_else29 "___sys_printf_else29" # "___sys_printf_else29" :ELF_str____sys_printf_loop_end28 "___sys_printf_loop_end28" # "___sys_printf_loop_end28" :ELF_str____sys_printf_else_end24 "___sys_printf_else_end24" # "___sys_printf_else_end24" :ELF_str____sys_printf_else23 "___sys_printf_else23" # "___sys_printf_else23" :ELF_str____sys_printf_else22 "___sys_printf_else22" # "___sys_printf_else22" :ELF_str____sys_printf_else16 "___sys_printf_else16" # "___sys_printf_else16" :ELF_str____sys_printf_else31 "___sys_printf_else31" # "___sys_printf_else31" :ELF_str____sys_printf_loop32 "___sys_printf_loop32" # "___sys_printf_loop32" :ELF_str____sys_printf_else33 "___sys_printf_else33" # "___sys_printf_else33" :ELF_str____sys_printf_loop_end32 "___sys_printf_loop_end32" # "___sys_printf_loop_end32" :ELF_str____sys_printf_else_end31 "___sys_printf_else_end31" # "___sys_printf_else_end31" :ELF_str____sys_printf_else30 "___sys_printf_else30" # "___sys_printf_else30" :ELF_str____sys_printf_or_end34 "___sys_printf_or_end34" # "___sys_printf_or_end34" :ELF_str____sys_printf_else36 "___sys_printf_else36" # "___sys_printf_else36" :ELF_str____sys_printf_loop37 "___sys_printf_loop37" # "___sys_printf_loop37" :ELF_str____sys_printf_else38 "___sys_printf_else38" # "___sys_printf_else38" :ELF_str____sys_printf_else39 "___sys_printf_else39" # "___sys_printf_else39" :ELF_str____sys_printf_else_end39 "___sys_printf_else_end39" # "___sys_printf_else_end39" :ELF_str____sys_printf_loop_end37 "___sys_printf_loop_end37" # "___sys_printf_loop_end37" :ELF_str____sys_printf_else_end36 "___sys_printf_else_end36" # "___sys_printf_else_end36" :ELF_str____sys_printf_else35 "___sys_printf_else35" # "___sys_printf_else35" :ELF_str____sys_printf_else40 "___sys_printf_else40" # "___sys_printf_else40" :ELF_str____sys_printf_else_end40 "___sys_printf_else_end40" # "___sys_printf_else_end40" :ELF_str____sys_printf_else_end35 "___sys_printf_else_end35" # "___sys_printf_else_end35" :ELF_str____sys_printf_else_end30 "___sys_printf_else_end30" # "___sys_printf_else_end30" :ELF_str____sys_printf_else_end16 "___sys_printf_else_end16" # "___sys_printf_else_end16" :ELF_str____sys_printf_else_end15 "___sys_printf_else_end15" # "___sys_printf_else_end15" :ELF_str____sys_printf_else_end10 "___sys_printf_else_end10" # "___sys_printf_else_end10" :ELF_str____sys_printf_else9 "___sys_printf_else9" # "___sys_printf_else9" :ELF_str____sys_printf_else_end9 "___sys_printf_else_end9" # "___sys_printf_else_end9" :ELF_str____sys_printf_else7 "___sys_printf_else7" # "___sys_printf_else7" :ELF_str____sys_printf_loop_end1 "___sys_printf_loop_end1" # "___sys_printf_loop_end1" :ELF_str____sys_printf_and_end41 "___sys_printf_and_end41" # "___sys_printf_and_end41" :ELF_str____sys_printf_else42 "___sys_printf_else42" # "___sys_printf_else42" :ELF_str_f_va_end "f_va_end" # "f_va_end" :ELF_str_f_fprintf "f_fprintf" # "f_fprintf" :ELF_str_f_printf "f_printf" # "f_printf" :ELF_str_f_sprintf "f_sprintf" # "f_sprintf" :ELF_str_f_snprintf "f_snprintf" # "f_snprintf" :ELF_str_f_vsnprintf "f_vsnprintf" # "f_vsnprintf" :ELF_str_f_open "f_open" # "f_open" :ELF_str__open_else1 "_open_else1" # "_open_else1" :ELF_str_f_close "f_close" # "f_close" :ELF_str_f_read "f_read" # "f_read" :ELF_str_f_lseek "f_lseek" # "f_lseek" :ELF_str_f_fopen "f_fopen" # "f_fopen" :ELF_str__fopen_or_end1 "_fopen_or_end1" # "_fopen_or_end1" :ELF_str__fopen_else2 "_fopen_else2" # "_fopen_else2" :ELF_str__fopen_else3 "_fopen_else3" # "_fopen_else3" :ELF_str__fopen_else4 "_fopen_else4" # "_fopen_else4" :ELF_str__fopen_else5 "_fopen_else5" # "_fopen_else5" :ELF_str__fopen_else7 "_fopen_else7" # "_fopen_else7" :ELF_str__fopen_else_end7 "_fopen_else_end7" # "_fopen_else_end7" :ELF_str__fopen_else6 "_fopen_else6" # "_fopen_else6" :ELF_str__fopen_else8 "_fopen_else8" # "_fopen_else8" :ELF_str__fopen_else_end8 "_fopen_else_end8" # "_fopen_else_end8" :ELF_str__fopen_else_end6 "_fopen_else_end6" # "_fopen_else_end6" :ELF_str__fopen_else9 "_fopen_else9" # "_fopen_else9" :ELF_str_f_fdopen "f_fdopen" # "f_fdopen" :ELF_str_f_fclose "f_fclose" # "f_fclose" :ELF_str_f_fflush "f_fflush" # "f_fflush" :ELF_str_f_fseek "f_fseek" # "f_fseek" :ELF_str_f_ftell "f_ftell" # "f_ftell" :ELF_str_f_fread "f_fread" # "f_fread" :ELF_str__fread_loop1 "_fread_loop1" # "_fread_loop1" :ELF_str__fread_else2 "_fread_else2" # "_fread_else2" :ELF_str__fread_else3 "_fread_else3" # "_fread_else3" :ELF_str__fread_loop_end1 "_fread_loop_end1" # "_fread_loop_end1" :ELF_str_f_lseek "f_lseek" # "f_lseek" :ELF_str_f_feof "f_feof" # "f_feof" :ELF_str_f_fgetc "f_fgetc" # "f_fgetc" :ELF_str__fgetc_else1 "_fgetc_else1" # "_fgetc_else1" :ELF_str__fgetc_else2 "_fgetc_else2" # "_fgetc_else2" :ELF_str_f_ldexp "f_ldexp" # "f_ldexp" :ELF_str__ldexp_loop1 "_ldexp_loop1" # "_ldexp_loop1" :ELF_str__ldexp_else2 "_ldexp_else2" # "_ldexp_else2" :ELF_str__ldexp_loop_end1 "_ldexp_loop_end1" # "_ldexp_loop_end1" :ELF_str_f_time "f_time" # "f_time" :ELF_str_f_localtime "f_localtime" # "f_localtime" :ELF_str_f_gettimeofday "f_gettimeofday" # "f_gettimeofday" :ELF_str_f_write "f_write" # "f_write" :ELF_str_f_fileno "f_fileno" # "f_fileno" :ELF_str_f_getcwd "f_getcwd" # "f_getcwd" :ELF_str_f_getenv "f_getenv" # "f_getenv" :ELF_str__getenv_loop1 "_getenv_loop1" # "_getenv_loop1" :ELF_str__getenv_else2 "_getenv_else2" # "_getenv_else2" :ELF_str__getenv_and_end3 "_getenv_and_end3" # "_getenv_and_end3" :ELF_str__getenv_else4 "_getenv_else4" # "_getenv_else4" :ELF_str__getenv_loop_end1 "_getenv_loop_end1" # "_getenv_loop_end1" :ELF_str_f_qsort "f_qsort" # "f_qsort" :ELF_str__qsort_loop1 "_qsort_loop1" # "_qsort_loop1" :ELF_str__qsort_else2 "_qsort_else2" # "_qsort_else2" :ELF_str__qsort_loop3 "_qsort_loop3" # "_qsort_loop3" :ELF_str__qsort_else4 "_qsort_else4" # "_qsort_else4" :ELF_str__qsort_loop6 "_qsort_loop6" # "_qsort_loop6" :ELF_str__qsort_else7 "_qsort_else7" # "_qsort_else7" :ELF_str__qsort_else8 "_qsort_else8" # "_qsort_else8" :ELF_str__qsort_else_end8 "_qsort_else_end8" # "_qsort_else_end8" :ELF_str__qsort_loop_end6 "_qsort_loop_end6" # "_qsort_loop_end6" :ELF_str__qsort_else5 "_qsort_else5" # "_qsort_else5" :ELF_str__qsort_loop_end3 "_qsort_loop_end3" # "_qsort_loop_end3" :ELF_str__qsort_loop_end1 "_qsort_loop_end1" # "_qsort_loop_end1" :ELF_str_f_time "f_time" # "f_time" :ELF_str_f_setjmp "f_setjmp" # "f_setjmp" :ELF_str_f_longjmp "f_longjmp" # "f_longjmp" :ELF_str_f_unlink "f_unlink" # "f_unlink" :ELF_str_f_sscanf "f_sscanf" # "f_sscanf" :ELF_str__sscanf_loop1 "_sscanf_loop1" # "_sscanf_loop1" :ELF_str__sscanf_else2 "_sscanf_else2" # "_sscanf_else2" :ELF_str__sscanf_else3 "_sscanf_else3" # "_sscanf_else3" :ELF_str__sscanf_loop6 "_sscanf_loop6" # "_sscanf_loop6" :ELF_str__sscanf_and_end7 "_sscanf_and_end7" # "_sscanf_and_end7" :ELF_str__sscanf_else8 "_sscanf_else8" # "_sscanf_else8" :ELF_str__sscanf_loop_end6 "_sscanf_loop_end6" # "_sscanf_loop_end6" :ELF_str__sscanf_else5 "_sscanf_else5" # "_sscanf_else5" :ELF_str__sscanf_else_end5 "_sscanf_else_end5" # "_sscanf_else_end5" :ELF_str__sscanf_else4 "_sscanf_else4" # "_sscanf_else4" :ELF_str__sscanf_else9 "_sscanf_else9" # "_sscanf_else9" :ELF_str__sscanf_else_end4 "_sscanf_else_end4" # "_sscanf_else_end4" :ELF_str__sscanf_else_end3 "_sscanf_else_end3" # "_sscanf_else_end3" :ELF_str__sscanf_loop_end1 "_sscanf_loop_end1" # "_sscanf_loop_end1" :ELF_str_f_atoi "f_atoi" # "f_atoi" :ELF_str_f_remove "f_remove" # "f_remove" :ELF_str_f_execvp "f_execvp" # "f_execvp" :ELF_str_f_mkdir "f_mkdir" # "f_mkdir" :ELF_str_f_chdir "f_chdir" # "f_chdir" :ELF_str_f_access "f_access" # "f_access" :ELF_str_f_chmod "f_chmod" # "f_chmod" :ELF_str_f_symlink "f_symlink" # "f_symlink" :ELF_str_f_uname "f_uname" # "f_uname" :ELF_str_f_execve "f_execve" # "f_execve" :ELF_str_f_fgets "f_fgets" # "f_fgets" :ELF_str__fgets_else1 "_fgets_else1" # "_fgets_else1" :ELF_str__fgets_loop2 "_fgets_loop2" # "_fgets_loop2" :ELF_str__fgets_else3 "_fgets_else3" # "_fgets_else3" :ELF_str__fgets_else4 "_fgets_else4" # "_fgets_else4" :ELF_str__fgets_else5 "_fgets_else5" # "_fgets_else5" :ELF_str__fgets_loop_end2 "_fgets_loop_end2" # "_fgets_loop_end2" :ELF_str_f_require "f_require" # "f_require" :ELF_str__require_else1 "_require_else1" # "_require_else1" :ELF_str_f_match "f_match" # "f_match" :ELF_str__match_and_end1 "_match_and_end1" # "_match_and_end1" :ELF_str__match_else2 "_match_else2" # "_match_else2" :ELF_str__match_else3 "_match_else3" # "_match_else3" :ELF_str__match_else4 "_match_else4" # "_match_else4" :ELF_str__match_loop5 "_match_loop5" # "_match_loop5" :ELF_str__match_else6 "_match_else6" # "_match_else6" :ELF_str__match_and_end7 "_match_and_end7" # "_match_and_end7" :ELF_str__match_else8 "_match_else8" # "_match_else8" :ELF_str__match_loop_end5 "_match_loop_end5" # "_match_loop_end5" :ELF_str_f_in_set "f_in_set" # "f_in_set" :ELF_str__in_set_else1 "_in_set_else1" # "_in_set_else1" :ELF_str__in_set_loop2 "_in_set_loop2" # "_in_set_loop2" :ELF_str__in_set_else3 "_in_set_else3" # "_in_set_else3" :ELF_str__in_set_else4 "_in_set_else4" # "_in_set_else4" :ELF_str__in_set_loop_end2 "_in_set_loop_end2" # "_in_set_loop_end2" :ELF_str_f___index_number "f___index_number" # "f___index_number" :ELF_str____index_number_loop1 "___index_number_loop1" # "___index_number_loop1" :ELF_str____index_number_else2 "___index_number_else2" # "___index_number_else2" :ELF_str____index_number_else3 "___index_number_else3" # "___index_number_else3" :ELF_str____index_number_loop_end1 "___index_number_loop_end1" # "___index_number_loop_end1" :ELF_str_f___toupper "f___toupper" # "f___toupper" :ELF_str____toupper_else1 "___toupper_else1" # "___toupper_else1" :ELF_str_f___set_reader "f___set_reader" # "f___set_reader" :ELF_str____set_reader_else1 "___set_reader_else1" # "___set_reader_else1" :ELF_str____set_reader_loop2 "___set_reader_loop2" # "___set_reader_loop2" :ELF_str____set_reader_else3 "___set_reader_else3" # "___set_reader_else3" :ELF_str____set_reader_else4 "___set_reader_else4" # "___set_reader_else4" :ELF_str____set_reader_else5 "___set_reader_else5" # "___set_reader_else5" :ELF_str____set_reader_loop_end2 "___set_reader_loop_end2" # "___set_reader_loop_end2" :ELF_str____set_reader_else6 "___set_reader_else6" # "___set_reader_else6" :ELF_str____set_reader_else7 "___set_reader_else7" # "___set_reader_else7" :ELF_str_f_strtoint "f_strtoint" # "f_strtoint" :ELF_str__strtoint_else1 "_strtoint_else1" # "_strtoint_else1" :ELF_str__strtoint_and_end2 "_strtoint_and_end2" # "_strtoint_and_end2" :ELF_str__strtoint_else3 "_strtoint_else3" # "_strtoint_else3" :ELF_str__strtoint_and_end4 "_strtoint_and_end4" # "_strtoint_and_end4" :ELF_str__strtoint_else5 "_strtoint_else5" # "_strtoint_else5" :ELF_str__strtoint_else6 "_strtoint_else6" # "_strtoint_else6" :ELF_str__strtoint_else_end6 "_strtoint_else_end6" # "_strtoint_else_end6" :ELF_str__strtoint_else_end5 "_strtoint_else_end5" # "_strtoint_else_end5" :ELF_str__strtoint_else_end3 "_strtoint_else_end3" # "_strtoint_else_end3" :ELF_str__strtoint_else_end1 "_strtoint_else_end1" # "_strtoint_else_end1" :ELF_str__strtoint_else7 "_strtoint_else7" # "_strtoint_else7" :ELF_str_f_int2str "f_int2str" # "f_int2str" :ELF_str__int2str_else1 "_int2str_else1" # "_int2str_else1" :ELF_str__int2str_and_end2 "_int2str_and_end2" # "_int2str_and_end2" :ELF_str__int2str_and_end3 "_int2str_and_end3" # "_int2str_and_end3" :ELF_str__int2str_else5 "_int2str_else5" # "_int2str_else5" :ELF_str__int2str_else4 "_int2str_else4" # "_int2str_else4" :ELF_str__int2str_else_end4 "_int2str_else_end4" # "_int2str_else_end4" :ELF_str__int2str_loop6 "_int2str_loop6" # "_int2str_loop6" :ELF_str__int2str_else7 "_int2str_else7" # "_int2str_else7" :ELF_str__int2str_loop_end6 "_int2str_loop_end6" # "_int2str_loop_end6" :ELF_str__int2str_else8 "_int2str_else8" # "_int2str_else8" :ELF_str_f_consume_token "f_consume_token" # "f_consume_token" :ELF_str__consume_token_loop1 "_consume_token_loop1" # "_consume_token_loop1" :ELF_str__consume_token_else2 "_consume_token_else2" # "_consume_token_else2" :ELF_str__consume_token_else3 "_consume_token_else3" # "_consume_token_else3" :ELF_str__consume_token_loop_end1 "_consume_token_loop_end1" # "_consume_token_loop_end1" :ELF_str_f_storeLabel "f_storeLabel" # "f_storeLabel" :ELF_str_f_line_Comment "f_line_Comment" # "f_line_Comment" :ELF_str__line_Comment_loop1 "_line_Comment_loop1" # "_line_Comment_loop1" :ELF_str__line_Comment_else2 "_line_Comment_else2" # "_line_Comment_else2" :ELF_str__line_Comment_else3 "_line_Comment_else3" # "_line_Comment_else3" :ELF_str__line_Comment_loop_end1 "_line_Comment_loop_end1" # "_line_Comment_loop_end1" :ELF_str_f_purge_string "f_purge_string" # "f_purge_string" :ELF_str__purge_string_loop1 "_purge_string_loop1" # "_purge_string_loop1" :ELF_str__purge_string_and_end2 "_purge_string_and_end2" # "_purge_string_and_end2" :ELF_str__purge_string_else3 "_purge_string_else3" # "_purge_string_else3" :ELF_str__purge_string_loop_end1 "_purge_string_loop_end1" # "_purge_string_loop_end1" :ELF_str_f_first_pass "f_first_pass" # "f_first_pass" :ELF_str__first_pass_else1 "_first_pass_else1" # "_first_pass_else1" :ELF_str__first_pass_else2 "_first_pass_else2" # "_first_pass_else2" :ELF_str__first_pass_loop3 "_first_pass_loop3" # "_first_pass_loop3" :ELF_str__first_pass_else4 "_first_pass_else4" # "_first_pass_else4" :ELF_str__first_pass_else5 "_first_pass_else5" # "_first_pass_else5" :ELF_str__first_pass_or_end6 "_first_pass_or_end6" # "_first_pass_or_end6" :ELF_str__first_pass_else7 "_first_pass_else7" # "_first_pass_else7" :ELF_str__first_pass_else8 "_first_pass_else8" # "_first_pass_else8" :ELF_str__first_pass_else_end7 "_first_pass_else_end7" # "_first_pass_else_end7" :ELF_str__first_pass_else_end5 "_first_pass_else_end5" # "_first_pass_else_end5" :ELF_str__first_pass_loop_end3 "_first_pass_loop_end3" # "_first_pass_loop_end3" :ELF_str_f_output_string_table "f_output_string_table" # "f_output_string_table" :ELF_str__output_string_table_loop1 "_output_string_table_loop1" # "_output_string_table_loop1" :ELF_str__output_string_table_else2 "_output_string_table_else2" # "_output_string_table_else2" :ELF_str__output_string_table_loop3 "_output_string_table_loop3" # "_output_string_table_loop3" :ELF_str__output_string_table_else4 "_output_string_table_else4" # "_output_string_table_else4" :ELF_str__output_string_table_else5 "_output_string_table_else5" # "_output_string_table_else5" :ELF_str__output_string_table_else6 "_output_string_table_else6" # "_output_string_table_else6" :ELF_str__output_string_table_else7 "_output_string_table_else7" # "_output_string_table_else7" :ELF_str__output_string_table_else_end6 "_output_string_table_else_end6" # "_output_string_table_else_end6" :ELF_str__output_string_table_else_end5 "_output_string_table_else_end5" # "_output_string_table_else_end5" :ELF_str__output_string_table_loop_end3 "_output_string_table_loop_end3" # "_output_string_table_loop_end3" :ELF_str__output_string_table_loop_end1 "_output_string_table_loop_end1" # "_output_string_table_loop_end1" :ELF_str_f_output_symbol_table "f_output_symbol_table" # "f_output_symbol_table" :ELF_str__output_symbol_table_else1 "_output_symbol_table_else1" # "_output_symbol_table_else1" :ELF_str__output_symbol_table_else_end1 "_output_symbol_table_else_end1" # "_output_symbol_table_else_end1" :ELF_str__output_symbol_table_loop2 "_output_symbol_table_loop2" # "_output_symbol_table_loop2" :ELF_str__output_symbol_table_else3 "_output_symbol_table_else3" # "_output_symbol_table_else3" :ELF_str__output_symbol_table_and_end5 "_output_symbol_table_and_end5" # "_output_symbol_table_and_end5" :ELF_str__output_symbol_table_else6 "_output_symbol_table_else6" # "_output_symbol_table_else6" :ELF_str__output_symbol_table_else_end6 "_output_symbol_table_else_end6" # "_output_symbol_table_else_end6" :ELF_str__output_symbol_table_else4 "_output_symbol_table_else4" # "_output_symbol_table_else4" :ELF_str__output_symbol_table_and_end7 "_output_symbol_table_and_end7" # "_output_symbol_table_and_end7" :ELF_str__output_symbol_table_else8 "_output_symbol_table_else8" # "_output_symbol_table_else8" :ELF_str__output_symbol_table_else_end8 "_output_symbol_table_else_end8" # "_output_symbol_table_else_end8" :ELF_str__output_symbol_table_else_end4 "_output_symbol_table_else_end4" # "_output_symbol_table_else_end4" :ELF_str__output_symbol_table_loop_end2 "_output_symbol_table_loop_end2" # "_output_symbol_table_loop_end2" :ELF_str_f_reverse_list "f_reverse_list" # "f_reverse_list" :ELF_str__reverse_list_loop1 "_reverse_list_loop1" # "_reverse_list_loop1" :ELF_str__reverse_list_else2 "_reverse_list_else2" # "_reverse_list_else2" :ELF_str__reverse_list_loop_end1 "_reverse_list_loop_end1" # "_reverse_list_loop_end1" :ELF_str_f_write_int "f_write_int" # "f_write_int" :ELF_str_f_write_register "f_write_register" # "f_write_register" :ELF_str__write_register_else1 "_write_register_else1" # "_write_register_else1" :ELF_str_f_write_section "f_write_section" # "f_write_section" :ELF_str__write_section_else1 "_write_section_else1" # "_write_section_else1" :ELF_str__write_section_else_end1 "_write_section_else_end1" # "_write_section_else_end1" :ELF_str_f_nibble_to_hex "f_nibble_to_hex" # "f_nibble_to_hex" :ELF_str__nibble_to_hex_else1 "_nibble_to_hex_else1" # "_nibble_to_hex_else1" :ELF_str__nibble_to_hex_else_end1 "_nibble_to_hex_else_end1" # "_nibble_to_hex_else_end1" :ELF_str_f_get_string "f_get_string" # "f_get_string" :ELF_str__get_string_loop1 "_get_string_loop1" # "_get_string_loop1" :ELF_str__get_string_else2 "_get_string_else2" # "_get_string_else2" :ELF_str__get_string_loop_end1 "_get_string_loop_end1" # "_get_string_loop_end1" :ELF_str_f_setup_string "f_setup_string" # "f_setup_string" :ELF_str__setup_string_else1 "_setup_string_else1" # "_setup_string_else1" :ELF_str__setup_string_else2 "_setup_string_else2" # "_setup_string_else2" :ELF_str__setup_string_else3 "_setup_string_else3" # "_setup_string_else3" :ELF_str__setup_string_else_end3 "_setup_string_else_end3" # "_setup_string_else_end3" :ELF_str__setup_string_else_end2 "_setup_string_else_end2" # "_setup_string_else_end2" :ELF_str__setup_string_else_end1 "_setup_string_else_end1" # "_setup_string_else_end1" :ELF_str_f_setup_strings "f_setup_strings" # "f_setup_strings" :ELF_str_f_main "f_main" # "f_main" :ELF_str__main_loop1 "_main_loop1" # "_main_loop1" :ELF_str__main_else2 "_main_else2" # "_main_else2" :ELF_str__main_else3 "_main_else3" # "_main_else3" :ELF_str__main_or_end4 "_main_or_end4" # "_main_or_end4" :ELF_str__main_else5 "_main_else5" # "_main_else5" :ELF_str__main_else6 "_main_else6" # "_main_else6" :ELF_str__main_or_end7 "_main_or_end7" # "_main_or_end7" :ELF_str__main_else8 "_main_else8" # "_main_else8" :ELF_str__main_or_end9 "_main_or_end9" # "_main_or_end9" :ELF_str__main_else11 "_main_else11" # "_main_else11" :ELF_str__main_else10 "_main_else10" # "_main_else10" :ELF_str__main_or_end12 "_main_or_end12" # "_main_or_end12" :ELF_str__main_else13 "_main_else13" # "_main_else13" :ELF_str__main_or_end14 "_main_or_end14" # "_main_or_end14" :ELF_str__main_else15 "_main_else15" # "_main_else15" :ELF_str__main_or_end16 "_main_or_end16" # "_main_or_end16" :ELF_str__main_else17 "_main_else17" # "_main_else17" :ELF_str__main_else18 "_main_else18" # "_main_else18" :ELF_str__main_else19 "_main_else19" # "_main_else19" :ELF_str__main_or_end20 "_main_or_end20" # "_main_or_end20" :ELF_str__main_else21 "_main_else21" # "_main_else21" :ELF_str__main_else22 "_main_else22" # "_main_else22" :ELF_str__main_else_end22 "_main_else_end22" # "_main_else_end22" :ELF_str__main_else_end21 "_main_else_end21" # "_main_else_end21" :ELF_str__main_else_end19 "_main_else_end19" # "_main_else_end19" :ELF_str__main_else_end18 "_main_else_end18" # "_main_else_end18" :ELF_str__main_else_end17 "_main_else_end17" # "_main_else_end17" :ELF_str__main_else_end15 "_main_else_end15" # "_main_else_end15" :ELF_str__main_else_end13 "_main_else_end13" # "_main_else_end13" :ELF_str__main_else_end10 "_main_else_end10" # "_main_else_end10" :ELF_str__main_else_end8 "_main_else_end8" # "_main_else_end8" :ELF_str__main_else_end6 "_main_else_end6" # "_main_else_end6" :ELF_str__main_else_end5 "_main_else_end5" # "_main_else_end5" :ELF_str__main_else_end3 "_main_else_end3" # "_main_else_end3" :ELF_str__main_loop_end1 "_main_loop_end1" # "_main_loop_end1" :ELF_str__main_else23 "_main_else23" # "_main_else23" :ELF_str__main_else24 "_main_else24" # "_main_else24" :ELF_str__main_else25 "_main_else25" # "_main_else25" :ELF_str__main_else_end25 "_main_else_end25" # "_main_else_end25" :ELF_str_f___init_globals__ "f___init_globals__" # "f___init_globals__" :ELF_str_ELF_data "ELF_data" # "ELF_data" :ELF_str_SYS_MALLOC "SYS_MALLOC" # "SYS_MALLOC" :ELF_str_string_0 "string_0" # "string_0" :ELF_str_string_1 "string_1" # "string_1" :ELF_str_string_2 "string_2" # "string_2" :ELF_str_string_3 "string_3" # "string_3" :ELF_str_string_4 "string_4" # "string_4" :ELF_str_string_5 "string_5" # "string_5" :ELF_str_string_6 "string_6" # "string_6" :ELF_str_string_7 "string_7" # "string_7" :ELF_str_string_8 "string_8" # "string_8" :ELF_str_string_9 "string_9" # "string_9" :ELF_str_string_10 "string_10" # "string_10" :ELF_str_string_11 "string_11" # "string_11" :ELF_str_string_12 "string_12" # "string_12" :ELF_str_string_13 "string_13" # "string_13" :ELF_str_string_14 "string_14" # "string_14" :ELF_str_string_15 "string_15" # "string_15" :ELF_str_string_16 "string_16" # "string_16" :ELF_str_string_17 "string_17" # "string_17" :ELF_str_string_18 "string_18" # "string_18" :ELF_str_string_19 "string_19" # "string_19" :ELF_str_string_20 "string_20" # "string_20" :ELF_str_string_21 "string_21" # "string_21" :ELF_str_string_22 "string_22" # "string_22" :ELF_str_string_23 "string_23" # "string_23" :ELF_str_string_24 "string_24" # "string_24" :ELF_str_string_25 "string_25" # "string_25" :ELF_str_string_26 "string_26" # "string_26" :ELF_str_string_27 "string_27" # "string_27" :ELF_str_string_28 "string_28" # "string_28" :ELF_str_string_29 "string_29" # "string_29" :ELF_str_string_30 "string_30" # "string_30" :ELF_str_string_31 "string_31" # "string_31" :ELF_str_string_32 "string_32" # "string_32" :ELF_str_string_33 "string_33" # "string_33" :ELF_str_string_34 "string_34" # "string_34" :ELF_str_string_35 "string_35" # "string_35" :ELF_str_string_36 "string_36" # "string_36" :ELF_str_string_37 "string_37" # "string_37" :ELF_str_string_38 "string_38" # "string_38" :ELF_str_string_39 "string_39" # "string_39" :ELF_str_string_40 "string_40" # "string_40" :ELF_str_string_41 "string_41" # "string_41" :ELF_str_string_42 "string_42" # "string_42" :ELF_str_string_43 "string_43" # "string_43" :ELF_str_string_44 "string_44" # "string_44" :ELF_str_string_45 "string_45" # "string_45" :ELF_str_string_46 "string_46" # "string_46" :ELF_str_string_47 "string_47" # "string_47" :ELF_str_string_48 "string_48" # "string_48" :ELF_str_string_49 "string_49" # "string_49" :ELF_str_string_50 "string_50" # "string_50" :ELF_str_string_51 "string_51" # "string_51" :ELF_str_string_52 "string_52" # "string_52" :ELF_str_string_53 "string_53" # "string_53" :ELF_str_string_54 "string_54" # "string_54" :ELF_str_string_55 "string_55" # "string_55" :ELF_str_string_56 "string_56" # "string_56" :ELF_str_string_57 "string_57" # "string_57" :ELF_str_string_58 "string_58" # "string_58" :ELF_str_string_59 "string_59" # "string_59" :ELF_str_string_60 "string_60" # "string_60" :ELF_str_string_61 "string_61" # "string_61" :ELF_str_string_62 "string_62" # "string_62" :ELF_str_string_63 "string_63" # "string_63" :ELF_str_string_64 "string_64" # "string_64" :ELF_str_string_65 "string_65" # "string_65" :ELF_str_string_66 "string_66" # "string_66" :ELF_str_string_67 "string_67" # "string_67" :ELF_str_string_68 "string_68" # "string_68" :ELF_str_string_69 "string_69" # "string_69" :ELF_str_string_70 "string_70" # "string_70" :ELF_str_string_71 "string_71" # "string_71" :ELF_str_string_72 "string_72" # "string_72" :ELF_str_string_73 "string_73" # "string_73" :ELF_str_string_74 "string_74" # "string_74" :ELF_str_string_75 "string_75" # "string_75" :ELF_str_string_76 "string_76" # "string_76" :ELF_str_string_77 "string_77" # "string_77" :ELF_str_string_78 "string_78" # "string_78" :ELF_str_string_79 "string_79" # "string_79" :ELF_str_string_80 "string_80" # "string_80" :ELF_str_string_81 "string_81" # "string_81" :ELF_str_string_82 "string_82" # "string_82" :ELF_str_string_83 "string_83" # "string_83" :ELF_str_string_84 "string_84" # "string_84" :ELF_str_string_85 "string_85" # "string_85" :ELF_str_string_86 "string_86" # "string_86" :ELF_str_string_87 "string_87" # "string_87" :ELF_str_string_88 "string_88" # "string_88" :ELF_str_string_89 "string_89" # "string_89" :ELF_str_string_90 "string_90" # "string_90" :ELF_str_string_91 "string_91" # "string_91" :ELF_str_string_92 "string_92" # "string_92" :ELF_str_string_93 "string_93" # "string_93" :ELF_str_string_94 "string_94" # "string_94" :ELF_str_string_95 "string_95" # "string_95" :ELF_str_string_96 "string_96" # "string_96" :ELF_str_string_97 "string_97" # "string_97" :ELF_str_string_98 "string_98" # "string_98" :ELF_str_string_99 "string_99" # "string_99" :ELF_str_string_100 "string_100" # "string_100" :ELF_str_string_101 "string_101" # "string_101" :ELF_str_string_102 "string_102" # "string_102" :ELF_str_string_103 "string_103" # "string_103" :ELF_str_string_104 "string_104" # "string_104" :ELF_str_string_105 "string_105" # "string_105" :ELF_str_string_106 "string_106" # "string_106" :ELF_str_string_107 "string_107" # "string_107" :ELF_str_string_108 "string_108" # "string_108" :ELF_str_string_109 "string_109" # "string_109" :ELF_str_string_110 "string_110" # "string_110" :ELF_str_string_111 "string_111" # "string_111" :ELF_str_string_112 "string_112" # "string_112" :ELF_str_string_113 "string_113" # "string_113" :ELF_str_string_114 "string_114" # "string_114" :ELF_str_string_115 "string_115" # "string_115" :ELF_str_string_116 "string_116" # "string_116" :ELF_str_string_117 "string_117" # "string_117" :ELF_str_string_118 "string_118" # "string_118" :ELF_str_string_119 "string_119" # "string_119" :ELF_str_string_120 "string_120" # "string_120" :ELF_str_string_121 "string_121" # "string_121" :ELF_str_string_122 "string_122" # "string_122" :ELF_str_g___sys_stdin "g___sys_stdin" # "g___sys_stdin" :ELF_str_g___sys_stdout "g___sys_stdout" # "g___sys_stdout" :ELF_str_g___sys_stderr "g___sys_stderr" # "g___sys_stderr" :ELF_str_g_stdin "g_stdin" # "g_stdin" :ELF_str_g_stdout "g_stdout" # "g_stdout" :ELF_str_g_stderr "g_stderr" # "g_stderr" :ELF_str_g_errno "g_errno" # "g_errno" :ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_GCC "g_LINE_MACRO_OUTPUT_FORMAT_GCC" # "g_LINE_MACRO_OUTPUT_FORMAT_GCC" :ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_NONE "g_LINE_MACRO_OUTPUT_FORMAT_NONE" # "g_LINE_MACRO_OUTPUT_FORMAT_NONE" :ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_STD "g_LINE_MACRO_OUTPUT_FORMAT_STD" # "g_LINE_MACRO_OUTPUT_FORMAT_STD" :ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_P10 "g_LINE_MACRO_OUTPUT_FORMAT_P10" # "g_LINE_MACRO_OUTPUT_FORMAT_P10" :ELF_str_g__sys_env "g__sys_env" # "g__sys_env" :ELF_str_g_max_string "g_max_string" # "g_max_string" :ELF_str_g_BITSIZE "g_BITSIZE" # "g_BITSIZE" :ELF_str_g_BigEndian "g_BigEndian" # "g_BigEndian" :ELF_str_g_BINARY "g_BINARY" # "g_BINARY" :ELF_str_g_OCTAL "g_OCTAL" # "g_OCTAL" :ELF_str_g_HEX "g_HEX" # "g_HEX" :ELF_str_g_zero_8 "g_zero_8" # "g_zero_8" :ELF_str_g_zero_16 "g_zero_16" # "g_zero_16" :ELF_str_g_zero_32 "g_zero_32" # "g_zero_32" :ELF_str_g_one_16 "g_one_16" # "g_one_16" :ELF_str_g_one_32 "g_one_32" # "g_one_32" :ELF_str_g_two_8 "g_two_8" # "g_two_8" :ELF_str_g_two_32 "g_two_32" # "g_two_32" :ELF_str_g_three_32 "g_three_32" # "g_three_32" :ELF_str_g_six_32 "g_six_32" # "g_six_32" :ELF_str_g_sixteen_32 "g_sixteen_32" # "g_sixteen_32" :ELF_str_g_twentyfour_32 "g_twentyfour_32" # "g_twentyfour_32" :ELF_str_g_output "g_output" # "g_output" :ELF_str_g_jump_table "g_jump_table" # "g_jump_table" :ELF_str_g_count "g_count" # "g_count" :ELF_str_g_entry "g_entry" # "g_entry" :ELF_str_ELF_end "ELF_end" # "ELF_end" # END Generated string table # Generated symbol table :ELF_sym # Required NULL symbol entry 00000000 # st_name 00000000 # st_value 00000000 # st_size 00 # st_info 00 # st_other 0100 # st_shndx %ELF_str_ELF_text>ELF_str # st_name &ELF_text #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__start>ELF_str # st_name &_start #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_sys_int80>ELF_str # st_name &f_sys_int80 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_sys_malloc>ELF_str # st_name &f_sys_malloc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_SYS_MALLOC>ELF_str # st_name &SYS_MALLOC #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_exit>ELF_str # st_name &f_exit #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_memcpy>ELF_str # st_name &f_memcpy #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__memcpy_loop1>ELF_str # st_name &_memcpy_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memcpy_else2>ELF_str # st_name &_memcpy_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memcpy_loop_end1>ELF_str # st_name &_memcpy_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_memmove>ELF_str # st_name &f_memmove #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__memmove_loop2>ELF_str # st_name &_memmove_loop2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_else3>ELF_str # st_name &_memmove_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_loop_end2>ELF_str # st_name &_memmove_loop_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_else1>ELF_str # st_name &_memmove_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_loop5>ELF_str # st_name &_memmove_loop5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_else6>ELF_str # st_name &_memmove_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_loop_end5>ELF_str # st_name &_memmove_loop_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_else4>ELF_str # st_name &_memmove_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_else_end1>ELF_str # st_name &_memmove_else_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_memset>ELF_str # st_name &f_memset #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__memset_loop1>ELF_str # st_name &_memset_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memset_else2>ELF_str # st_name &_memset_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memset_loop_end1>ELF_str # st_name &_memset_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_memcmp>ELF_str # st_name &f_memcmp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__memcmp_loop1>ELF_str # st_name &_memcmp_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memcmp_else2>ELF_str # st_name &_memcmp_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memcmp_else3>ELF_str # st_name &_memcmp_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memcmp_loop_end1>ELF_str # st_name &_memcmp_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strlen>ELF_str # st_name &f_strlen #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strlen_loop1>ELF_str # st_name &_strlen_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strlen_else2>ELF_str # st_name &_strlen_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strlen_loop_end1>ELF_str # st_name &_strlen_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strcpy>ELF_str # st_name &f_strcpy #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strcpy_loop1>ELF_str # st_name &_strcpy_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strcpy_else2>ELF_str # st_name &_strcpy_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strcpy_loop_end1>ELF_str # st_name &_strcpy_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strncpy>ELF_str # st_name &f_strncpy #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strncpy_loop1>ELF_str # st_name &_strncpy_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncpy_else2>ELF_str # st_name &_strncpy_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncpy_else3>ELF_str # st_name &_strncpy_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncpy_loop_end1>ELF_str # st_name &_strncpy_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strcat>ELF_str # st_name &f_strcat #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_strchr>ELF_str # st_name &f_strchr #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strchr_loop1>ELF_str # st_name &_strchr_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strchr_else2>ELF_str # st_name &_strchr_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strchr_else3>ELF_str # st_name &_strchr_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strchr_loop_end1>ELF_str # st_name &_strchr_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strchr_else4>ELF_str # st_name &_strchr_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strchr_else_end4>ELF_str # st_name &_strchr_else_end4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strrchr>ELF_str # st_name &f_strrchr #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strrchr_loop1>ELF_str # st_name &_strrchr_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strrchr_else2>ELF_str # st_name &_strrchr_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strrchr_else3>ELF_str # st_name &_strrchr_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strrchr_loop_end1>ELF_str # st_name &_strrchr_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strcmp>ELF_str # st_name &f_strcmp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strcmp_loop1>ELF_str # st_name &_strcmp_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strcmp_or_end2>ELF_str # st_name &_strcmp_or_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strcmp_else3>ELF_str # st_name &_strcmp_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strcmp_loop_end1>ELF_str # st_name &_strcmp_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strncmp>ELF_str # st_name &f_strncmp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strncmp_loop1>ELF_str # st_name &_strncmp_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncmp_else2>ELF_str # st_name &_strncmp_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncmp_or_end3>ELF_str # st_name &_strncmp_or_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncmp_else4>ELF_str # st_name &_strncmp_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncmp_loop_end1>ELF_str # st_name &_strncmp_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strstr>ELF_str # st_name &f_strstr #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strstr_loop1>ELF_str # st_name &_strstr_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strstr_else2>ELF_str # st_name &_strstr_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strstr_else3>ELF_str # st_name &_strstr_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strstr_loop_end1>ELF_str # st_name &_strstr_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strtoul>ELF_str # st_name &f_strtoul #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strtoul_or_end3>ELF_str # st_name &_strtoul_or_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else4>ELF_str # st_name &_strtoul_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else2>ELF_str # st_name &_strtoul_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else1>ELF_str # st_name &_strtoul_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else5>ELF_str # st_name &_strtoul_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else_end5>ELF_str # st_name &_strtoul_else_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_loop6>ELF_str # st_name &_strtoul_loop6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_and_end7>ELF_str # st_name &_strtoul_and_end7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else8>ELF_str # st_name &_strtoul_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_and_end9>ELF_str # st_name &_strtoul_and_end9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else10>ELF_str # st_name &_strtoul_else10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_and_end11>ELF_str # st_name &_strtoul_and_end11 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else12>ELF_str # st_name &_strtoul_else12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else_end12>ELF_str # st_name &_strtoul_else_end12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else_end10>ELF_str # st_name &_strtoul_else_end10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else_end8>ELF_str # st_name &_strtoul_else_end8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_loop_end6>ELF_str # st_name &_strtoul_loop_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else13>ELF_str # st_name &_strtoul_else13 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strtol>ELF_str # st_name &f_strtol #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strtol_else1>ELF_str # st_name &_strtol_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strtoll>ELF_str # st_name &f_strtoll #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_strtoull>ELF_str # st_name &f_strtoull #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_strtof>ELF_str # st_name &f_strtof #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_malloc>ELF_str # st_name &f_malloc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_realloc>ELF_str # st_name &f_realloc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__realloc_loop2>ELF_str # st_name &_realloc_loop2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__realloc_else3>ELF_str # st_name &_realloc_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__realloc_loop_end2>ELF_str # st_name &_realloc_loop_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__realloc_else1>ELF_str # st_name &_realloc_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_calloc>ELF_str # st_name &f_calloc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__calloc_loop1>ELF_str # st_name &_calloc_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__calloc_else2>ELF_str # st_name &_calloc_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__calloc_loop_end1>ELF_str # st_name &_calloc_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_free>ELF_str # st_name &f_free #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fwrite>ELF_str # st_name &f_fwrite #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fputc>ELF_str # st_name &f_fputc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fputs>ELF_str # st_name &f_fputs #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f___sys_printf>ELF_str # st_name &f___sys_printf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str____sys_printf_loop1>ELF_str # st_name &___sys_printf_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else2>ELF_str # st_name &___sys_printf_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else4>ELF_str # st_name &___sys_printf_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else5>ELF_str # st_name &___sys_printf_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end4>ELF_str # st_name &___sys_printf_else_end4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else6>ELF_str # st_name &___sys_printf_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else3>ELF_str # st_name &___sys_printf_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else8>ELF_str # st_name &___sys_printf_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else10>ELF_str # st_name &___sys_printf_else10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else11>ELF_str # st_name &___sys_printf_else11 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop12>ELF_str # st_name &___sys_printf_loop12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_and_end13>ELF_str # st_name &___sys_printf_and_end13 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else14>ELF_str # st_name &___sys_printf_else14 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end12>ELF_str # st_name &___sys_printf_loop_end12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else15>ELF_str # st_name &___sys_printf_else15 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else17>ELF_str # st_name &___sys_printf_else17 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else18>ELF_str # st_name &___sys_printf_else18 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop19>ELF_str # st_name &___sys_printf_loop19 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else20>ELF_str # st_name &___sys_printf_else20 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end19>ELF_str # st_name &___sys_printf_loop_end19 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else21>ELF_str # st_name &___sys_printf_else21 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end17>ELF_str # st_name &___sys_printf_else_end17 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop25>ELF_str # st_name &___sys_printf_loop25 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else26>ELF_str # st_name &___sys_printf_else26 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else27>ELF_str # st_name &___sys_printf_else27 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end27>ELF_str # st_name &___sys_printf_else_end27 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end25>ELF_str # st_name &___sys_printf_loop_end25 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else24>ELF_str # st_name &___sys_printf_else24 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop28>ELF_str # st_name &___sys_printf_loop28 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else29>ELF_str # st_name &___sys_printf_else29 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end28>ELF_str # st_name &___sys_printf_loop_end28 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end24>ELF_str # st_name &___sys_printf_else_end24 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else23>ELF_str # st_name &___sys_printf_else23 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else22>ELF_str # st_name &___sys_printf_else22 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else16>ELF_str # st_name &___sys_printf_else16 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else31>ELF_str # st_name &___sys_printf_else31 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop32>ELF_str # st_name &___sys_printf_loop32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else33>ELF_str # st_name &___sys_printf_else33 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end32>ELF_str # st_name &___sys_printf_loop_end32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end31>ELF_str # st_name &___sys_printf_else_end31 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else30>ELF_str # st_name &___sys_printf_else30 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_or_end34>ELF_str # st_name &___sys_printf_or_end34 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else36>ELF_str # st_name &___sys_printf_else36 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop37>ELF_str # st_name &___sys_printf_loop37 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else38>ELF_str # st_name &___sys_printf_else38 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else39>ELF_str # st_name &___sys_printf_else39 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end39>ELF_str # st_name &___sys_printf_else_end39 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end37>ELF_str # st_name &___sys_printf_loop_end37 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end36>ELF_str # st_name &___sys_printf_else_end36 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else35>ELF_str # st_name &___sys_printf_else35 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else40>ELF_str # st_name &___sys_printf_else40 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end40>ELF_str # st_name &___sys_printf_else_end40 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end35>ELF_str # st_name &___sys_printf_else_end35 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end30>ELF_str # st_name &___sys_printf_else_end30 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end16>ELF_str # st_name &___sys_printf_else_end16 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end15>ELF_str # st_name &___sys_printf_else_end15 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end10>ELF_str # st_name &___sys_printf_else_end10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else9>ELF_str # st_name &___sys_printf_else9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end9>ELF_str # st_name &___sys_printf_else_end9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else7>ELF_str # st_name &___sys_printf_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end1>ELF_str # st_name &___sys_printf_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_and_end41>ELF_str # st_name &___sys_printf_and_end41 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else42>ELF_str # st_name &___sys_printf_else42 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_va_end>ELF_str # st_name &f_va_end #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fprintf>ELF_str # st_name &f_fprintf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_printf>ELF_str # st_name &f_printf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_sprintf>ELF_str # st_name &f_sprintf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_snprintf>ELF_str # st_name &f_snprintf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_vsnprintf>ELF_str # st_name &f_vsnprintf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_open>ELF_str # st_name &f_open #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__open_else1>ELF_str # st_name &_open_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_close>ELF_str # st_name &f_close #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_read>ELF_str # st_name &f_read #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_lseek>ELF_str # st_name &f_lseek #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fopen>ELF_str # st_name &f_fopen #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__fopen_or_end1>ELF_str # st_name &_fopen_or_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else2>ELF_str # st_name &_fopen_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else3>ELF_str # st_name &_fopen_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else4>ELF_str # st_name &_fopen_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else5>ELF_str # st_name &_fopen_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else7>ELF_str # st_name &_fopen_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else_end7>ELF_str # st_name &_fopen_else_end7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else6>ELF_str # st_name &_fopen_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else8>ELF_str # st_name &_fopen_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else_end8>ELF_str # st_name &_fopen_else_end8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else_end6>ELF_str # st_name &_fopen_else_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else9>ELF_str # st_name &_fopen_else9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_fdopen>ELF_str # st_name &f_fdopen #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fclose>ELF_str # st_name &f_fclose #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fflush>ELF_str # st_name &f_fflush #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fseek>ELF_str # st_name &f_fseek #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_ftell>ELF_str # st_name &f_ftell #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fread>ELF_str # st_name &f_fread #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__fread_loop1>ELF_str # st_name &_fread_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fread_else2>ELF_str # st_name &_fread_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fread_else3>ELF_str # st_name &_fread_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fread_loop_end1>ELF_str # st_name &_fread_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_lseek>ELF_str # st_name &f_lseek #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_feof>ELF_str # st_name &f_feof #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fgetc>ELF_str # st_name &f_fgetc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__fgetc_else1>ELF_str # st_name &_fgetc_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgetc_else2>ELF_str # st_name &_fgetc_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_ldexp>ELF_str # st_name &f_ldexp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__ldexp_loop1>ELF_str # st_name &_ldexp_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__ldexp_else2>ELF_str # st_name &_ldexp_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__ldexp_loop_end1>ELF_str # st_name &_ldexp_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_time>ELF_str # st_name &f_time #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_localtime>ELF_str # st_name &f_localtime #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_gettimeofday>ELF_str # st_name &f_gettimeofday #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_write>ELF_str # st_name &f_write #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fileno>ELF_str # st_name &f_fileno #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_getcwd>ELF_str # st_name &f_getcwd #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_getenv>ELF_str # st_name &f_getenv #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__getenv_loop1>ELF_str # st_name &_getenv_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__getenv_else2>ELF_str # st_name &_getenv_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__getenv_and_end3>ELF_str # st_name &_getenv_and_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__getenv_else4>ELF_str # st_name &_getenv_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__getenv_loop_end1>ELF_str # st_name &_getenv_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_qsort>ELF_str # st_name &f_qsort #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__qsort_loop1>ELF_str # st_name &_qsort_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else2>ELF_str # st_name &_qsort_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_loop3>ELF_str # st_name &_qsort_loop3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else4>ELF_str # st_name &_qsort_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_loop6>ELF_str # st_name &_qsort_loop6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else7>ELF_str # st_name &_qsort_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else8>ELF_str # st_name &_qsort_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else_end8>ELF_str # st_name &_qsort_else_end8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_loop_end6>ELF_str # st_name &_qsort_loop_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else5>ELF_str # st_name &_qsort_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_loop_end3>ELF_str # st_name &_qsort_loop_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_loop_end1>ELF_str # st_name &_qsort_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_time>ELF_str # st_name &f_time #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_setjmp>ELF_str # st_name &f_setjmp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_longjmp>ELF_str # st_name &f_longjmp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_unlink>ELF_str # st_name &f_unlink #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_sscanf>ELF_str # st_name &f_sscanf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__sscanf_loop1>ELF_str # st_name &_sscanf_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else2>ELF_str # st_name &_sscanf_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else3>ELF_str # st_name &_sscanf_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_loop6>ELF_str # st_name &_sscanf_loop6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_and_end7>ELF_str # st_name &_sscanf_and_end7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else8>ELF_str # st_name &_sscanf_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_loop_end6>ELF_str # st_name &_sscanf_loop_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else5>ELF_str # st_name &_sscanf_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else_end5>ELF_str # st_name &_sscanf_else_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else4>ELF_str # st_name &_sscanf_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else9>ELF_str # st_name &_sscanf_else9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else_end4>ELF_str # st_name &_sscanf_else_end4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else_end3>ELF_str # st_name &_sscanf_else_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_loop_end1>ELF_str # st_name &_sscanf_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_atoi>ELF_str # st_name &f_atoi #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_remove>ELF_str # st_name &f_remove #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_execvp>ELF_str # st_name &f_execvp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_mkdir>ELF_str # st_name &f_mkdir #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_chdir>ELF_str # st_name &f_chdir #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_access>ELF_str # st_name &f_access #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_chmod>ELF_str # st_name &f_chmod #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_symlink>ELF_str # st_name &f_symlink #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_uname>ELF_str # st_name &f_uname #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_execve>ELF_str # st_name &f_execve #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fgets>ELF_str # st_name &f_fgets #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__fgets_else1>ELF_str # st_name &_fgets_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_loop2>ELF_str # st_name &_fgets_loop2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_else3>ELF_str # st_name &_fgets_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_else4>ELF_str # st_name &_fgets_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_else5>ELF_str # st_name &_fgets_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_loop_end2>ELF_str # st_name &_fgets_loop_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_require>ELF_str # st_name &f_require #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__require_else1>ELF_str # st_name &_require_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_match>ELF_str # st_name &f_match #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__match_and_end1>ELF_str # st_name &_match_and_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__match_else2>ELF_str # st_name &_match_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__match_else3>ELF_str # st_name &_match_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__match_else4>ELF_str # st_name &_match_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__match_loop5>ELF_str # st_name &_match_loop5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__match_else6>ELF_str # st_name &_match_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__match_and_end7>ELF_str # st_name &_match_and_end7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__match_else8>ELF_str # st_name &_match_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__match_loop_end5>ELF_str # st_name &_match_loop_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_in_set>ELF_str # st_name &f_in_set #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__in_set_else1>ELF_str # st_name &_in_set_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__in_set_loop2>ELF_str # st_name &_in_set_loop2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__in_set_else3>ELF_str # st_name &_in_set_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__in_set_else4>ELF_str # st_name &_in_set_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__in_set_loop_end2>ELF_str # st_name &_in_set_loop_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f___index_number>ELF_str # st_name &f___index_number #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str____index_number_loop1>ELF_str # st_name &___index_number_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____index_number_else2>ELF_str # st_name &___index_number_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____index_number_else3>ELF_str # st_name &___index_number_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____index_number_loop_end1>ELF_str # st_name &___index_number_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f___toupper>ELF_str # st_name &f___toupper #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str____toupper_else1>ELF_str # st_name &___toupper_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f___set_reader>ELF_str # st_name &f___set_reader #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str____set_reader_else1>ELF_str # st_name &___set_reader_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____set_reader_loop2>ELF_str # st_name &___set_reader_loop2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____set_reader_else3>ELF_str # st_name &___set_reader_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____set_reader_else4>ELF_str # st_name &___set_reader_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____set_reader_else5>ELF_str # st_name &___set_reader_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____set_reader_loop_end2>ELF_str # st_name &___set_reader_loop_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____set_reader_else6>ELF_str # st_name &___set_reader_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____set_reader_else7>ELF_str # st_name &___set_reader_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strtoint>ELF_str # st_name &f_strtoint #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strtoint_else1>ELF_str # st_name &_strtoint_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoint_and_end2>ELF_str # st_name &_strtoint_and_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoint_else3>ELF_str # st_name &_strtoint_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoint_and_end4>ELF_str # st_name &_strtoint_and_end4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoint_else5>ELF_str # st_name &_strtoint_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoint_else6>ELF_str # st_name &_strtoint_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoint_else_end6>ELF_str # st_name &_strtoint_else_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoint_else_end5>ELF_str # st_name &_strtoint_else_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoint_else_end3>ELF_str # st_name &_strtoint_else_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoint_else_end1>ELF_str # st_name &_strtoint_else_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoint_else7>ELF_str # st_name &_strtoint_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_int2str>ELF_str # st_name &f_int2str #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__int2str_else1>ELF_str # st_name &_int2str_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__int2str_and_end2>ELF_str # st_name &_int2str_and_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__int2str_and_end3>ELF_str # st_name &_int2str_and_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__int2str_else5>ELF_str # st_name &_int2str_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__int2str_else4>ELF_str # st_name &_int2str_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__int2str_else_end4>ELF_str # st_name &_int2str_else_end4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__int2str_loop6>ELF_str # st_name &_int2str_loop6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__int2str_else7>ELF_str # st_name &_int2str_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__int2str_loop_end6>ELF_str # st_name &_int2str_loop_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__int2str_else8>ELF_str # st_name &_int2str_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_consume_token>ELF_str # st_name &f_consume_token #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__consume_token_loop1>ELF_str # st_name &_consume_token_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__consume_token_else2>ELF_str # st_name &_consume_token_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__consume_token_else3>ELF_str # st_name &_consume_token_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__consume_token_loop_end1>ELF_str # st_name &_consume_token_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_storeLabel>ELF_str # st_name &f_storeLabel #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_line_Comment>ELF_str # st_name &f_line_Comment #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__line_Comment_loop1>ELF_str # st_name &_line_Comment_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__line_Comment_else2>ELF_str # st_name &_line_Comment_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__line_Comment_else3>ELF_str # st_name &_line_Comment_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__line_Comment_loop_end1>ELF_str # st_name &_line_Comment_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_purge_string>ELF_str # st_name &f_purge_string #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__purge_string_loop1>ELF_str # st_name &_purge_string_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__purge_string_and_end2>ELF_str # st_name &_purge_string_and_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__purge_string_else3>ELF_str # st_name &_purge_string_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__purge_string_loop_end1>ELF_str # st_name &_purge_string_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_first_pass>ELF_str # st_name &f_first_pass #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__first_pass_else1>ELF_str # st_name &_first_pass_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__first_pass_else2>ELF_str # st_name &_first_pass_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__first_pass_loop3>ELF_str # st_name &_first_pass_loop3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__first_pass_else4>ELF_str # st_name &_first_pass_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__first_pass_else5>ELF_str # st_name &_first_pass_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__first_pass_or_end6>ELF_str # st_name &_first_pass_or_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__first_pass_else7>ELF_str # st_name &_first_pass_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__first_pass_else8>ELF_str # st_name &_first_pass_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__first_pass_else_end7>ELF_str # st_name &_first_pass_else_end7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__first_pass_else_end5>ELF_str # st_name &_first_pass_else_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__first_pass_loop_end3>ELF_str # st_name &_first_pass_loop_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_output_string_table>ELF_str # st_name &f_output_string_table #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__output_string_table_loop1>ELF_str # st_name &_output_string_table_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_string_table_else2>ELF_str # st_name &_output_string_table_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_string_table_loop3>ELF_str # st_name &_output_string_table_loop3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_string_table_else4>ELF_str # st_name &_output_string_table_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_string_table_else5>ELF_str # st_name &_output_string_table_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_string_table_else6>ELF_str # st_name &_output_string_table_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_string_table_else7>ELF_str # st_name &_output_string_table_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_string_table_else_end6>ELF_str # st_name &_output_string_table_else_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_string_table_else_end5>ELF_str # st_name &_output_string_table_else_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_string_table_loop_end3>ELF_str # st_name &_output_string_table_loop_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_string_table_loop_end1>ELF_str # st_name &_output_string_table_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_output_symbol_table>ELF_str # st_name &f_output_symbol_table #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__output_symbol_table_else1>ELF_str # st_name &_output_symbol_table_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_else_end1>ELF_str # st_name &_output_symbol_table_else_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_loop2>ELF_str # st_name &_output_symbol_table_loop2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_else3>ELF_str # st_name &_output_symbol_table_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_and_end5>ELF_str # st_name &_output_symbol_table_and_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_else6>ELF_str # st_name &_output_symbol_table_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_else_end6>ELF_str # st_name &_output_symbol_table_else_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_else4>ELF_str # st_name &_output_symbol_table_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_and_end7>ELF_str # st_name &_output_symbol_table_and_end7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_else8>ELF_str # st_name &_output_symbol_table_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_else_end8>ELF_str # st_name &_output_symbol_table_else_end8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_else_end4>ELF_str # st_name &_output_symbol_table_else_end4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_symbol_table_loop_end2>ELF_str # st_name &_output_symbol_table_loop_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_reverse_list>ELF_str # st_name &f_reverse_list #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__reverse_list_loop1>ELF_str # st_name &_reverse_list_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__reverse_list_else2>ELF_str # st_name &_reverse_list_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__reverse_list_loop_end1>ELF_str # st_name &_reverse_list_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_write_int>ELF_str # st_name &f_write_int #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_write_register>ELF_str # st_name &f_write_register #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__write_register_else1>ELF_str # st_name &_write_register_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_write_section>ELF_str # st_name &f_write_section #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__write_section_else1>ELF_str # st_name &_write_section_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__write_section_else_end1>ELF_str # st_name &_write_section_else_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_nibble_to_hex>ELF_str # st_name &f_nibble_to_hex #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__nibble_to_hex_else1>ELF_str # st_name &_nibble_to_hex_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__nibble_to_hex_else_end1>ELF_str # st_name &_nibble_to_hex_else_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_get_string>ELF_str # st_name &f_get_string #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__get_string_loop1>ELF_str # st_name &_get_string_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__get_string_else2>ELF_str # st_name &_get_string_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__get_string_loop_end1>ELF_str # st_name &_get_string_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_setup_string>ELF_str # st_name &f_setup_string #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__setup_string_else1>ELF_str # st_name &_setup_string_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__setup_string_else2>ELF_str # st_name &_setup_string_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__setup_string_else3>ELF_str # st_name &_setup_string_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__setup_string_else_end3>ELF_str # st_name &_setup_string_else_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__setup_string_else_end2>ELF_str # st_name &_setup_string_else_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__setup_string_else_end1>ELF_str # st_name &_setup_string_else_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_setup_strings>ELF_str # st_name &f_setup_strings #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_main>ELF_str # st_name &f_main #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__main_loop1>ELF_str # st_name &_main_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else2>ELF_str # st_name &_main_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else3>ELF_str # st_name &_main_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end4>ELF_str # st_name &_main_or_end4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else5>ELF_str # st_name &_main_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else6>ELF_str # st_name &_main_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end7>ELF_str # st_name &_main_or_end7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else8>ELF_str # st_name &_main_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end9>ELF_str # st_name &_main_or_end9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else11>ELF_str # st_name &_main_else11 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else10>ELF_str # st_name &_main_else10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end12>ELF_str # st_name &_main_or_end12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else13>ELF_str # st_name &_main_else13 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end14>ELF_str # st_name &_main_or_end14 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else15>ELF_str # st_name &_main_else15 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end16>ELF_str # st_name &_main_or_end16 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else17>ELF_str # st_name &_main_else17 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else18>ELF_str # st_name &_main_else18 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else19>ELF_str # st_name &_main_else19 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end20>ELF_str # st_name &_main_or_end20 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else21>ELF_str # st_name &_main_else21 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else22>ELF_str # st_name &_main_else22 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end22>ELF_str # st_name &_main_else_end22 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end21>ELF_str # st_name &_main_else_end21 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end19>ELF_str # st_name &_main_else_end19 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end18>ELF_str # st_name &_main_else_end18 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end17>ELF_str # st_name &_main_else_end17 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end15>ELF_str # st_name &_main_else_end15 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end13>ELF_str # st_name &_main_else_end13 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end10>ELF_str # st_name &_main_else_end10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end8>ELF_str # st_name &_main_else_end8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end6>ELF_str # st_name &_main_else_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end5>ELF_str # st_name &_main_else_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end3>ELF_str # st_name &_main_else_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end1>ELF_str # st_name &_main_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else23>ELF_str # st_name &_main_else23 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else24>ELF_str # st_name &_main_else24 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else25>ELF_str # st_name &_main_else25 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end25>ELF_str # st_name &_main_else_end25 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f___init_globals__>ELF_str # st_name &f___init_globals__ #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_ELF_data>ELF_str # st_name &ELF_data #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_SYS_MALLOC>ELF_str # st_name &SYS_MALLOC #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_0>ELF_str # st_name &string_0 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_1>ELF_str # st_name &string_1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_2>ELF_str # st_name &string_2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_3>ELF_str # st_name &string_3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_4>ELF_str # st_name &string_4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_5>ELF_str # st_name &string_5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_6>ELF_str # st_name &string_6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_7>ELF_str # st_name &string_7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_8>ELF_str # st_name &string_8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_9>ELF_str # st_name &string_9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_10>ELF_str # st_name &string_10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_11>ELF_str # st_name &string_11 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_12>ELF_str # st_name &string_12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_13>ELF_str # st_name &string_13 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_14>ELF_str # st_name &string_14 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_15>ELF_str # st_name &string_15 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_16>ELF_str # st_name &string_16 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_17>ELF_str # st_name &string_17 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_18>ELF_str # st_name &string_18 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_19>ELF_str # st_name &string_19 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_20>ELF_str # st_name &string_20 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_21>ELF_str # st_name &string_21 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_22>ELF_str # st_name &string_22 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_23>ELF_str # st_name &string_23 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_24>ELF_str # st_name &string_24 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_25>ELF_str # st_name &string_25 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_26>ELF_str # st_name &string_26 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_27>ELF_str # st_name &string_27 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_28>ELF_str # st_name &string_28 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_29>ELF_str # st_name &string_29 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_30>ELF_str # st_name &string_30 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_31>ELF_str # st_name &string_31 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_32>ELF_str # st_name &string_32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_33>ELF_str # st_name &string_33 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_34>ELF_str # st_name &string_34 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_35>ELF_str # st_name &string_35 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_36>ELF_str # st_name &string_36 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_37>ELF_str # st_name &string_37 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_38>ELF_str # st_name &string_38 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_39>ELF_str # st_name &string_39 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_40>ELF_str # st_name &string_40 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_41>ELF_str # st_name &string_41 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_42>ELF_str # st_name &string_42 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_43>ELF_str # st_name &string_43 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_44>ELF_str # st_name &string_44 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_45>ELF_str # st_name &string_45 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_46>ELF_str # st_name &string_46 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_47>ELF_str # st_name &string_47 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_48>ELF_str # st_name &string_48 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_49>ELF_str # st_name &string_49 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_50>ELF_str # st_name &string_50 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_51>ELF_str # st_name &string_51 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_52>ELF_str # st_name &string_52 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_53>ELF_str # st_name &string_53 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_54>ELF_str # st_name &string_54 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_55>ELF_str # st_name &string_55 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_56>ELF_str # st_name &string_56 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_57>ELF_str # st_name &string_57 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_58>ELF_str # st_name &string_58 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_59>ELF_str # st_name &string_59 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_60>ELF_str # st_name &string_60 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_61>ELF_str # st_name &string_61 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_62>ELF_str # st_name &string_62 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_63>ELF_str # st_name &string_63 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_64>ELF_str # st_name &string_64 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_65>ELF_str # st_name &string_65 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_66>ELF_str # st_name &string_66 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_67>ELF_str # st_name &string_67 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_68>ELF_str # st_name &string_68 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_69>ELF_str # st_name &string_69 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_70>ELF_str # st_name &string_70 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_71>ELF_str # st_name &string_71 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_72>ELF_str # st_name &string_72 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_73>ELF_str # st_name &string_73 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_74>ELF_str # st_name &string_74 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_75>ELF_str # st_name &string_75 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_76>ELF_str # st_name &string_76 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_77>ELF_str # st_name &string_77 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_78>ELF_str # st_name &string_78 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_79>ELF_str # st_name &string_79 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_80>ELF_str # st_name &string_80 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_81>ELF_str # st_name &string_81 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_82>ELF_str # st_name &string_82 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_83>ELF_str # st_name &string_83 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_84>ELF_str # st_name &string_84 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_85>ELF_str # st_name &string_85 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_86>ELF_str # st_name &string_86 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_87>ELF_str # st_name &string_87 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_88>ELF_str # st_name &string_88 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_89>ELF_str # st_name &string_89 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_90>ELF_str # st_name &string_90 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_91>ELF_str # st_name &string_91 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_92>ELF_str # st_name &string_92 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_93>ELF_str # st_name &string_93 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_94>ELF_str # st_name &string_94 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_95>ELF_str # st_name &string_95 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_96>ELF_str # st_name &string_96 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_97>ELF_str # st_name &string_97 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_98>ELF_str # st_name &string_98 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_99>ELF_str # st_name &string_99 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_100>ELF_str # st_name &string_100 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_101>ELF_str # st_name &string_101 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_102>ELF_str # st_name &string_102 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_103>ELF_str # st_name &string_103 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_104>ELF_str # st_name &string_104 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_105>ELF_str # st_name &string_105 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_106>ELF_str # st_name &string_106 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_107>ELF_str # st_name &string_107 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_108>ELF_str # st_name &string_108 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_109>ELF_str # st_name &string_109 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_110>ELF_str # st_name &string_110 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_111>ELF_str # st_name &string_111 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_112>ELF_str # st_name &string_112 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_113>ELF_str # st_name &string_113 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_114>ELF_str # st_name &string_114 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_115>ELF_str # st_name &string_115 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_116>ELF_str # st_name &string_116 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_117>ELF_str # st_name &string_117 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_118>ELF_str # st_name &string_118 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_119>ELF_str # st_name &string_119 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_120>ELF_str # st_name &string_120 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_121>ELF_str # st_name &string_121 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_122>ELF_str # st_name &string_122 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g___sys_stdin>ELF_str # st_name &g___sys_stdin #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g___sys_stdout>ELF_str # st_name &g___sys_stdout #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g___sys_stderr>ELF_str # st_name &g___sys_stderr #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_stdin>ELF_str # st_name &g_stdin #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_stdout>ELF_str # st_name &g_stdout #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_stderr>ELF_str # st_name &g_stderr #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_errno>ELF_str # st_name &g_errno #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_GCC>ELF_str # st_name &g_LINE_MACRO_OUTPUT_FORMAT_GCC #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_NONE>ELF_str # st_name &g_LINE_MACRO_OUTPUT_FORMAT_NONE #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_STD>ELF_str # st_name &g_LINE_MACRO_OUTPUT_FORMAT_STD #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_P10>ELF_str # st_name &g_LINE_MACRO_OUTPUT_FORMAT_P10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g__sys_env>ELF_str # st_name &g__sys_env #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_max_string>ELF_str # st_name &g_max_string #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_BITSIZE>ELF_str # st_name &g_BITSIZE #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_BigEndian>ELF_str # st_name &g_BigEndian #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_BINARY>ELF_str # st_name &g_BINARY #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_OCTAL>ELF_str # st_name &g_OCTAL #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_HEX>ELF_str # st_name &g_HEX #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_zero_8>ELF_str # st_name &g_zero_8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_zero_16>ELF_str # st_name &g_zero_16 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_zero_32>ELF_str # st_name &g_zero_32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_one_16>ELF_str # st_name &g_one_16 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_one_32>ELF_str # st_name &g_one_32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_two_8>ELF_str # st_name &g_two_8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_two_32>ELF_str # st_name &g_two_32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_three_32>ELF_str # st_name &g_three_32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_six_32>ELF_str # st_name &g_six_32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_sixteen_32>ELF_str # st_name &g_sixteen_32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_twentyfour_32>ELF_str # st_name &g_twentyfour_32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_output>ELF_str # st_name &g_output #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_jump_table>ELF_str # st_name &g_jump_table #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_count>ELF_str # st_name &g_count #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_entry>ELF_str # st_name &g_entry #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_ELF_end>ELF_str # st_name &ELF_end #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx # END Generated symbol table :ELF_end
# :ELF_text #:ELF_text # :_start #:_start B8 2D000000 # mov_eax, %45 # the Syscall # for SYS_BRK BB 00000000 # mov_ebx, %0 # Get current brk CD80 # int_80 # Let the kernel do the work A3 &SYS_MALLOC # mov_[DWORD],eax &SYS_MALLOC # Set our malloc pointer # # # allocate memory for the second stack B8 A0860100 # mov_eax, %100000 50 # push_eax # (sys_malloc assums address) E8 %f_sys_malloc # call %f_sys_malloc 89C5 # mov_ebp,eax # # # setup argc and argv for the main function 89C2 # mov_edx,eax 58 # pop_eax 89E3 # mov_ebx,esp 50 # push_eax 53 # push_ebx 89D0 # mov_eax,edx # # #call main E8 %f_main # call %f_main # # # program completed Successfully 89C3 # mov_ebx,eax # All is well B8 01000000 # mov_eax, %1 # put the exit syscall number in eax CD80 # int_80 # Call it a good day # ## These sys_ function follow the same calling conventions ## as all the other functions. To access the arguments on the stack ## the return address is stored in the edi address (which is only possible ## because these functions do not call other function) and the function ## address (which is stored in the eax register, the top of the stack) ## needs to be popped as well. # :f_sys_int80 #:f_sys_int80 5F # pop_edi # Save return address from the stack 5A # pop_edx # Get the arguments from the stack 59 # pop_ecx 5B # pop_ebx 58 # pop_eax CD80 # int_80 # call the Kernel 57 # push_edi # restore return address to the stack C3 # ret # :f_sys_malloc #:f_sys_malloc 5F # pop_edi 58 # pop_eax 8B1D &SYS_MALLOC # mov_ebx,[DWORD] &SYS_MALLOC # Using the current pointer 01C3 # add_ebx,eax # Request the number of desired bytes B8 2D000000 # mov_eax, %45 # the Syscall # for SYS_BRK CD80 # int_80 # call the Kernel 8B05 &SYS_MALLOC # mov_eax,[DWORD] &SYS_MALLOC # Return pointer 891D &SYS_MALLOC # mov_[DWORD],ebx &SYS_MALLOC # Update pointer 57 # push_edi C3 # ret :SYS_MALLOC #:SYS_MALLOC 00000000 # NULL # # # :f_exit #:f_exit 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # result (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 8 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # result (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_memcpy #:f_memcpy 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # src (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # dest (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # d (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # dest (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # src (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 34 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_memcpy_loop1 #:_memcpy_loop1 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_memcpy_else2 # je %_memcpy_else2 E9 %_memcpy_loop_end1 # jmp %_memcpy_loop_end1 ## stdlib.c 35 :_memcpy_else2 #:_memcpy_else2 # no else 50 # push_eax # d (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_memcpy_loop1 # jmp %_memcpy_loop1 :_memcpy_loop_end1 #:_memcpy_loop_end1 ## stdlib.c 36 50 # push_eax # dest (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_memmove #:f_memmove 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # src (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # dest (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # d (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # dest (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # src (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 43 50 # push_eax # 1 B8 01000000 # mov_eax, %1 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_memmove_else1 # je %_memmove_else1 ## stdlib.c 44 ## stdlib.c 45 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_memmove_loop2 #:_memmove_loop2 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # < 39C3 # cmp_eax_ebx 0F92C0 # setb_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_memmove_else3 # je %_memmove_else3 E9 %_memmove_loop_end2 # jmp %_memmove_loop_end2 ## stdlib.c 46 :_memmove_else3 #:_memmove_else3 # no else 50 # push_eax # d (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_memmove_loop2 # jmp %_memmove_loop2 :_memmove_loop_end2 #:_memmove_loop_end2 E9 %_memmove_else_end1 # jmp %_memmove_else_end1 :_memmove_else1 #:_memmove_else1 ## stdlib.c 48 50 # push_eax # src (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # dest (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # < 39C3 # cmp_eax_ebx 0F92C0 # setb_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_memmove_else4 # je %_memmove_else4 ## stdlib.c 49 50 # push_eax # j (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 51 50 # push_eax # i (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_memmove_loop5 #:_memmove_loop5 50 # push_eax # i (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # < 39C3 # cmp_eax_ebx 0F92C0 # setb_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_memmove_else6 # je %_memmove_else6 E9 %_memmove_loop_end5 # jmp %_memmove_loop_end5 ## stdlib.c 52 :_memmove_else6 #:_memmove_else6 # no else 50 # push_eax # d (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # j (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # j (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; 50 # push_eax # j (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 58 # pop_eax # ; E9 %_memmove_loop5 # jmp %_memmove_loop5 :_memmove_loop_end5 #:_memmove_loop_end5 :_memmove_else4 #:_memmove_else4 # no else :_memmove_else_end1 #:_memmove_else_end1 ## stdlib.c 54 50 # push_eax # dest (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_memset #:f_memset 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # c (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # s (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # p (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # s (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 60 50 # push_eax # i (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_memset_loop1 #:_memset_loop1 50 # push_eax # i (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # < 39C3 # cmp_eax_ebx 0F92C0 # setb_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_memset_else2 # je %_memset_else2 E9 %_memset_loop_end1 # jmp %_memset_loop_end1 ## stdlib.c 61 :_memset_else2 #:_memset_else2 # no else 50 # push_eax # p (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # c (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_memset_loop1 # jmp %_memset_loop1 :_memset_loop_end1 #:_memset_loop_end1 ## stdlib.c 62 50 # push_eax # s (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_memcmp #:f_memcmp 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # s2 (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # s1 (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # p1 (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # s1 (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # p2 (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # s2 (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 69 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_memcmp_loop1 #:_memcmp_loop1 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # < 39C3 # cmp_eax_ebx 0F92C0 # setb_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_memcmp_else2 # je %_memcmp_else2 E9 %_memcmp_loop_end1 # jmp %_memcmp_loop_end1 ## stdlib.c 70 :_memcmp_else2 #:_memcmp_else2 # no else 50 # push_eax # result (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 50 # push_eax # p1 (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # p2 (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 72 50 # push_eax # result (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_memcmp_else3 # je %_memcmp_else3 ## stdlib.c 73 50 # push_eax # result (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_memcmp_else3 #:_memcmp_else3 # no else 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; 50 # push_eax # p1 (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; 50 # push_eax # p2 (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_memcmp_loop1 # jmp %_memcmp_loop1 :_memcmp_loop_end1 #:_memcmp_loop_end1 ## stdlib.c 75 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strlen #:f_strlen 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # s (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # len (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 81 :_strlen_loop1 #:_strlen_loop1 50 # push_eax # s (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strlen_else2 # je %_strlen_else2 E9 %_strlen_loop_end1 # jmp %_strlen_loop_end1 ## stdlib.c 82 :_strlen_else2 #:_strlen_else2 # no else 50 # push_eax # len (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; 50 # push_eax # s (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_strlen_loop1 # jmp %_strlen_loop1 :_strlen_loop_end1 #:_strlen_loop_end1 ## stdlib.c 83 50 # push_eax # len (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strcpy #:f_strcpy 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # src (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # dest (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # dest (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 89 :_strcpy_loop1 #:_strcpy_loop1 50 # push_eax # src (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strcpy_else2 # je %_strcpy_else2 E9 %_strcpy_loop_end1 # jmp %_strcpy_loop_end1 ## stdlib.c 90 :_strcpy_else2 #:_strcpy_else2 # no else 50 # push_eax # dest (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 50 # push_eax # src (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; E9 %_strcpy_loop1 # jmp %_strcpy_loop1 :_strcpy_loop_end1 #:_strcpy_loop_end1 ## stdlib.c 91 50 # push_eax # dest (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 92 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strncpy #:f_strncpy 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # src (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # dest (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # d (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # dest (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # src (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 99 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_strncpy_loop1 #:_strncpy_loop1 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strncpy_else2 # je %_strncpy_else2 E9 %_strncpy_loop_end1 # jmp %_strncpy_loop_end1 ## stdlib.c 100 ## stdlib.c 101 :_strncpy_else2 #:_strncpy_else2 # no else 50 # push_eax # d (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 102 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strncpy_else3 # je %_strncpy_else3 ## stdlib.c 103 E9 %_strncpy_loop_end1 # jmp %_strncpy_loop_end1 :_strncpy_else3 #:_strncpy_else3 # no else 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_strncpy_loop1 # jmp %_strncpy_loop1 :_strncpy_loop_end1 #:_strncpy_loop_end1 ## stdlib.c 105 50 # push_eax # dest (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strcat #:f_strcat 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # src (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # dest (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 110 50 # push_eax # dest (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # dest (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # strlen (function) B8 &f_strlen # mov_eax, &f_strlen 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # src (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # strcpy (function) B8 &f_strcpy # mov_eax, &f_strcpy 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 58 # pop_eax # ; ## stdlib.c 111 50 # push_eax # dest (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strchr #:f_strchr 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # c (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 116 :_strchr_loop1 #:_strchr_loop1 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strchr_else2 # je %_strchr_else2 E9 %_strchr_loop_end1 # jmp %_strchr_loop_end1 ## stdlib.c 117 :_strchr_else2 #:_strchr_else2 # no else 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # c (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strchr_else3 # je %_strchr_else3 ## stdlib.c 118 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_strchr_else3 #:_strchr_else3 # no else 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_strchr_loop1 # jmp %_strchr_loop1 :_strchr_loop_end1 #:_strchr_loop_end1 ## stdlib.c 119 50 # push_eax # c (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strchr_else4 # je %_strchr_else4 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? E9 %_strchr_else_end4 # jmp %_strchr_else_end4 :_strchr_else4 #:_strchr_else4 50 # push_eax # 0 B8 00000000 # mov_eax, %0 :_strchr_else_end4 #:_strchr_else_end4 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strrchr #:f_strrchr 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # c (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # n (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # strlen (function) B8 &f_strlen # mov_eax, &f_strlen 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 125 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # n (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_strrchr_loop1 #:_strrchr_loop1 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # >=sfv 39C3 # cmp_eax_ebx 0F9DC0 # setge_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strrchr_else2 # je %_strrchr_else2 E9 %_strrchr_loop_end1 # jmp %_strrchr_loop_end1 ## stdlib.c 126 :_strrchr_else2 #:_strrchr_else2 # no else 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # c (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strrchr_else3 # je %_strrchr_else3 ## stdlib.c 127 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_strrchr_else3 #:_strrchr_else3 # no else 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 58 # pop_eax # ; E9 %_strrchr_loop1 # jmp %_strrchr_loop1 :_strrchr_loop_end1 #:_strrchr_loop_end1 ## stdlib.c 128 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strcmp #:f_strcmp 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # s2 (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # s1 (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 133 :_strcmp_loop1 #:_strcmp_loop1 ## stdlib.c 134 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # s1 (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # s2 (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 136 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # || 0F85 %_strcmp_or_end2 # jne %_strcmp_or_end2 58 # pop_eax 50 # push_eax # s1 (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_strcmp_or_end2 #:_strcmp_or_end2 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strcmp_else3 # je %_strcmp_else3 ## stdlib.c 137 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret ## stdlib.c 138 :_strcmp_else3 #:_strcmp_else3 # no else 50 # push_eax # s1 (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 139 50 # push_eax # s2 (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_strcmp_loop1 # jmp %_strcmp_loop1 :_strcmp_loop_end1 #:_strcmp_loop_end1 ## stdlib.c 141 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strncmp #:f_strncmp 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # s2 (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # s1 (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 146 :_strncmp_loop1 #:_strncmp_loop1 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # > 39C3 # cmp_eax_ebx 0F97C0 # seta_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strncmp_else2 # je %_strncmp_else2 E9 %_strncmp_loop_end1 # jmp %_strncmp_loop_end1 ## stdlib.c 147 :_strncmp_else2 #:_strncmp_else2 # no else 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # s1 (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # s2 (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 149 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # || 0F85 %_strncmp_or_end3 # jne %_strncmp_or_end3 58 # pop_eax 50 # push_eax # s1 (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_strncmp_or_end3 #:_strncmp_or_end3 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strncmp_else4 # je %_strncmp_else4 ## stdlib.c 150 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret ## stdlib.c 151 :_strncmp_else4 #:_strncmp_else4 # no else 50 # push_eax # s1 (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 152 50 # push_eax # s2 (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; 50 # push_eax # n (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 58 # pop_eax # ; E9 %_strncmp_loop1 # jmp %_strncmp_loop1 :_strncmp_loop_end1 #:_strncmp_loop_end1 ## stdlib.c 154 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strstr #:f_strstr 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # needle (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # haystack (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # n (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # needle (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # strlen (function) B8 &f_strlen # mov_eax, &f_strlen 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 160 :_strstr_loop1 #:_strstr_loop1 50 # push_eax # haystack (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strstr_else2 # je %_strstr_else2 E9 %_strstr_loop_end1 # jmp %_strstr_loop_end1 ## stdlib.c 161 :_strstr_else2 #:_strstr_else2 # no else 50 # push_eax # haystack (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # needle (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # n (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # strncmp (function) B8 &f_strncmp # mov_eax, &f_strncmp 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strstr_else3 # je %_strstr_else3 ## stdlib.c 162 50 # push_eax # haystack (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_strstr_else3 #:_strstr_else3 # no else 50 # push_eax # haystack (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_strstr_loop1 # jmp %_strstr_loop1 :_strstr_loop_end1 #:_strstr_loop_end1 ## stdlib.c 163 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strtoul #:f_strtoul 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # endptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 169 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strtoul_else1 # je %_strtoul_else1 ## stdlib.c 170 ## stdlib.c 171 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 172 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 48 B8 30000000 # mov_eax, %48 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strtoul_else2 # je %_strtoul_else2 ## stdlib.c 173 ## stdlib.c 174 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # 8 B8 08000000 # mov_eax, %8 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 175 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 176 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 120 B8 78000000 # mov_eax, %120 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # || 0F85 %_strtoul_or_end3 # jne %_strtoul_or_end3 58 # pop_eax 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 88 B8 58000000 # mov_eax, %88 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_strtoul_or_end3 #:_strtoul_or_end3 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strtoul_else4 # je %_strtoul_else4 ## stdlib.c 177 ## stdlib.c 178 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # 16 B8 10000000 # mov_eax, %16 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 179 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; :_strtoul_else4 #:_strtoul_else4 # no else :_strtoul_else2 #:_strtoul_else2 # no else :_strtoul_else1 #:_strtoul_else1 # no else 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # sub_10 (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # 48 B8 30000000 # mov_eax, %48 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strtoul_else5 # je %_strtoul_else5 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? E9 %_strtoul_else_end5 # jmp %_strtoul_else_end5 :_strtoul_else5 #:_strtoul_else5 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 :_strtoul_else_end5 #:_strtoul_else_end5 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 185 :_strtoul_loop6 #:_strtoul_loop6 ## stdlib.c 186 ## stdlib.c 187 50 # push_eax # 48 B8 30000000 # mov_eax, %48 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %_strtoul_and_end7 # je %_strtoul_and_end7 58 # pop_eax 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # sub_10 (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al :_strtoul_and_end7 #:_strtoul_and_end7 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strtoul_else8 # je %_strtoul_else8 ## stdlib.c 188 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 48 B8 30000000 # mov_eax, %48 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %_strtoul_else_end8 # jmp %_strtoul_else_end8 :_strtoul_else8 #:_strtoul_else8 ## stdlib.c 189 50 # push_eax # 97 B8 61000000 # mov_eax, %97 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %_strtoul_and_end9 # je %_strtoul_and_end9 58 # pop_eax 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 97 B8 61000000 # mov_eax, %97 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al :_strtoul_and_end9 #:_strtoul_and_end9 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strtoul_else10 # je %_strtoul_else10 ## stdlib.c 190 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 97 B8 61000000 # mov_eax, %97 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %_strtoul_else_end10 # jmp %_strtoul_else_end10 :_strtoul_else10 #:_strtoul_else10 ## stdlib.c 191 50 # push_eax # 65 B8 41000000 # mov_eax, %65 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %_strtoul_and_end11 # je %_strtoul_and_end11 58 # pop_eax 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 65 B8 41000000 # mov_eax, %65 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al :_strtoul_and_end11 #:_strtoul_and_end11 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strtoul_else12 # je %_strtoul_else12 ## stdlib.c 192 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 65 B8 41000000 # mov_eax, %65 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %_strtoul_else_end12 # jmp %_strtoul_else_end12 :_strtoul_else12 #:_strtoul_else12 ## stdlib.c 194 E9 %_strtoul_loop_end6 # jmp %_strtoul_loop_end6 :_strtoul_else_end12 #:_strtoul_else_end12 :_strtoul_else_end10 #:_strtoul_else_end10 :_strtoul_else_end8 #:_strtoul_else_end8 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_strtoul_loop6 # jmp %_strtoul_loop6 :_strtoul_loop_end6 #:_strtoul_loop_end6 ## stdlib.c 196 50 # push_eax # endptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strtoul_else13 # je %_strtoul_else13 ## stdlib.c 197 50 # push_eax # endptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 198 :_strtoul_else13 #:_strtoul_else13 # no else 50 # push_eax # result (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strtol #:f_strtol 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # endptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # sign (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 204 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 45 B8 2D000000 # mov_eax, %45 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_strtol_else1 # je %_strtol_else1 ## stdlib.c 205 ## stdlib.c 206 50 # push_eax # sign (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 207 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 209 :_strtol_else1 #:_strtol_else1 # no else 50 # push_eax # sign (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # endptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # strtoul (function) B8 &f_strtoul # mov_eax, &f_strtoul 81C5 14000000 # add_ebp, %20 # () FFD0 # call_eax 81ED 14000000 # sub_ebp, %20 5B # pop_ebx # * F7E3 # mul_ebx 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strtoll #:f_strtoll 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # endptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 214 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # endptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # strtol (function) B8 &f_strtol # mov_eax, &f_strtol 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strtoull #:f_strtoull 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # endptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 219 50 # push_eax # nptr (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # endptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # base (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # strtoul (function) B8 &f_strtoul # mov_eax, &f_strtoul 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_strtof #:f_strtof 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # endptr (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # str (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 225 50 # push_eax # endptr (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # str (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 226 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_malloc #:f_malloc 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # size (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 231 50 # push_eax # size (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # size (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 3 B8 03000000 # mov_eax, %3 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 3 B8 03000000 # mov_eax, %3 F7D0 # not_eax # ~ 5B # pop_ebx # & 21D8 # and_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # result (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # size (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # sys_malloc (function) B8 &f_sys_malloc # mov_eax, &f_sys_malloc 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 233 50 # push_eax # result (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 234 50 # push_eax # result (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 235 50 # push_eax # result (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_realloc #:f_realloc 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # size (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # ptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # size (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # malloc (function) B8 &f_malloc # mov_eax, &f_malloc 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 241 50 # push_eax # ptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_realloc_else1 # je %_realloc_else1 ## stdlib.c 242 50 # push_eax # old_ptr (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # ptr (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # old_size (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # old_ptr (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 89C3 # mov_ebx,eax # /s 58 # pop_eax 99 # cdq F7FB # idiv_ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 245 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_realloc_loop2 #:_realloc_loop2 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # old_size (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_realloc_else3 # je %_realloc_else3 E9 %_realloc_loop_end2 # jmp %_realloc_loop_end2 ## stdlib.c 246 :_realloc_else3 #:_realloc_else3 # no else 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # old_ptr (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_realloc_loop2 # jmp %_realloc_loop2 :_realloc_loop_end2 #:_realloc_loop_end2 ## stdlib.c 248 :_realloc_else1 #:_realloc_else1 # no else 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_calloc #:f_calloc 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # S (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # N (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # len (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # N (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # S (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # r (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # len (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # malloc (function) B8 &f_malloc # mov_eax, &f_malloc 81C5 14000000 # add_ebp, %20 # () FFD0 # call_eax 81ED 14000000 # sub_ebp, %20 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 255 50 # push_eax # i (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_calloc_loop1 #:_calloc_loop1 50 # push_eax # i (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # len (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_calloc_else2 # je %_calloc_else2 E9 %_calloc_loop_end1 # jmp %_calloc_loop_end1 ## stdlib.c 256 :_calloc_else2 #:_calloc_else2 # no else 50 # push_eax # r (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_calloc_loop1 # jmp %_calloc_loop1 :_calloc_loop_end1 #:_calloc_loop_end1 ## stdlib.c 257 50 # push_eax # r (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_free #:f_free 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # ptr (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 263 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fwrite #:f_fwrite 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # nmemb (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # size (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # ptr (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 268 50 # push_eax # 4 B8 04000000 # mov_eax, %4 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 8B00 # mov_eax,[eax] # ? 50 # push_eax # ptr (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # nmemb (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 14000000 # add_ebp, %20 # () FFD0 # call_eax 81ED 14000000 # sub_ebp, %20 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fputc #:f_fputc 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # c (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 273 50 # push_eax # 4 B8 04000000 # mov_eax, %4 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 8B00 # mov_eax,[eax] # ? 50 # push_eax # c (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fputs #:f_fputs 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 278 50 # push_eax # 4 B8 04000000 # mov_eax, %4 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 8B00 # mov_eax,[eax] # ? 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # s (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # strlen (function) B8 &f_strlen # mov_eax, &f_strlen 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f___sys_printf #:f___sys_printf 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # len (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # trg (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # stream (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # cnt (local) 8D85 34000000 # lea_eax,[ebp+DWORD] %52 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # org_format (local) 8D85 38000000 # lea_eax,[ebp+DWORD] %56 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 292 :___sys_printf_loop1 #:___sys_printf_loop1 ## stdlib.c 293 ## stdlib.c 294 50 # push_eax # len (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else2 # je %___sys_printf_else2 ## stdlib.c 295 E9 %___sys_printf_loop_end1 # jmp %___sys_printf_loop_end1 ## stdlib.c 296 :___sys_printf_else2 #:___sys_printf_else2 # no else 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # >s 39C3 # cmp_eax_ebx 0F9FC0 # setg_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else3 # je %___sys_printf_else3 ## stdlib.c 297 ## stdlib.c 298 50 # push_eax # stream (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else4 # je %___sys_printf_else4 ## stdlib.c 299 50 # push_eax # s (local) 8D85 30000000 # lea_eax,[ebp+DWORD] %48 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # stream (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputc (function) B8 &f_fputc # mov_eax, &f_fputc 81C5 3C000000 # add_ebp, %60 # () FFD0 # call_eax 81ED 3C000000 # sub_ebp, %60 58 # pop_eax # ; E9 %___sys_printf_else_end4 # jmp %___sys_printf_else_end4 :___sys_printf_else4 #:___sys_printf_else4 ## stdlib.c 300 50 # push_eax # trg (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else5 # je %___sys_printf_else5 ## stdlib.c 301 50 # push_eax # trg (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 50 # push_eax # s (local) 8D85 30000000 # lea_eax,[ebp+DWORD] %48 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; :___sys_printf_else5 #:___sys_printf_else5 # no else :___sys_printf_else_end4 #:___sys_printf_else_end4 ## stdlib.c 302 50 # push_eax # s (local) 8D85 30000000 # lea_eax,[ebp+DWORD] %48 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 303 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 58 # pop_eax # ; ## stdlib.c 304 50 # push_eax # cnt (local) 8D85 34000000 # lea_eax,[ebp+DWORD] %52 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 305 50 # push_eax # len (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # >s 39C3 # cmp_eax_ebx 0F9FC0 # setg_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else6 # je %___sys_printf_else6 ## stdlib.c 306 50 # push_eax # len (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 58 # pop_eax # ; :___sys_printf_else6 #:___sys_printf_else6 # no else ## stdlib.c 308 :___sys_printf_else3 #:___sys_printf_else3 # no else 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else7 # je %___sys_printf_else7 ## stdlib.c 309 ## stdlib.c 310 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else8 # je %___sys_printf_else8 ## stdlib.c 311 E9 %___sys_printf_loop_end1 # jmp %___sys_printf_loop_end1 ## stdlib.c 312 :___sys_printf_else8 #:___sys_printf_else8 # no else 50 # push_eax # s (local) 8D85 30000000 # lea_eax,[ebp+DWORD] %48 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 313 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 314 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 37 B8 25000000 # mov_eax, %37 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else9 # je %___sys_printf_else9 ## stdlib.c 315 ## stdlib.c 316 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 317 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 37 B8 25000000 # mov_eax, %37 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else10 # je %___sys_printf_else10 ## stdlib.c 318 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 37 B8 25000000 # mov_eax, %37 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; E9 %___sys_printf_else_end10 # jmp %___sys_printf_else_end10 :___sys_printf_else10 #:___sys_printf_else10 ## stdlib.c 320 50 # push_eax # modifier (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # sign (local) 8D85 40000000 # lea_eax,[ebp+DWORD] %64 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 323 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 45 B8 2D000000 # mov_eax, %45 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else11 # je %___sys_printf_else11 ## stdlib.c 324 ## stdlib.c 325 50 # push_eax # sign (local) 8D85 40000000 # lea_eax,[ebp+DWORD] %64 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 326 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 328 :___sys_printf_else11 #:___sys_printf_else11 # no else :___sys_printf_loop12 #:___sys_printf_loop12 50 # push_eax # 48 B8 30000000 # mov_eax, %48 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %___sys_printf_and_end13 # je %___sys_printf_and_end13 58 # pop_eax 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 57 B8 39000000 # mov_eax, %57 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al :___sys_printf_and_end13 #:___sys_printf_and_end13 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else14 # je %___sys_printf_else14 E9 %___sys_printf_loop_end12 # jmp %___sys_printf_loop_end12 ## stdlib.c 329 ## stdlib.c 330 :___sys_printf_else14 #:___sys_printf_else14 # no else 50 # push_eax # modifier (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 50 # push_eax # modifier (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 48 B8 30000000 # mov_eax, %48 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 331 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %___sys_printf_loop12 # jmp %___sys_printf_loop12 :___sys_printf_loop_end12 #:___sys_printf_loop_end12 ## stdlib.c 333 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 115 B8 73000000 # mov_eax, %115 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else15 # je %___sys_printf_else15 ## stdlib.c 334 ## stdlib.c 335 50 # push_eax # s (local) 8D85 30000000 # lea_eax,[ebp+DWORD] %48 50 # push_eax # args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 336 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # s (local) 8D85 30000000 # lea_eax,[ebp+DWORD] %48 8B00 # mov_eax,[eax] # ? 50 # push_eax # strlen (function) B8 &f_strlen # mov_eax, &f_strlen 81C5 44000000 # add_ebp, %68 # () FFD0 # call_eax 81ED 44000000 # sub_ebp, %68 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %___sys_printf_else_end15 # jmp %___sys_printf_else_end15 :___sys_printf_else15 #:___sys_printf_else15 ## stdlib.c 338 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 100 B8 64000000 # mov_eax, %100 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else16 # je %___sys_printf_else16 ## stdlib.c 339 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 50 # push_eax # args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # b (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # 20 B8 14000000 # mov_eax, %20 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 342 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else17 # je %___sys_printf_else17 ## stdlib.c 343 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # b (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 48 B8 30000000 # mov_eax, %48 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; E9 %___sys_printf_else_end17 # jmp %___sys_printf_else_end17 :___sys_printf_else17 #:___sys_printf_else17 ## stdlib.c 345 ## stdlib.c 346 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else18 # je %___sys_printf_else18 ## stdlib.c 346 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 347 :___sys_printf_else18 #:___sys_printf_else18 # no else :___sys_printf_loop19 #:___sys_printf_loop19 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # >s 39C3 # cmp_eax_ebx 0F9FC0 # setg_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else20 # je %___sys_printf_else20 E9 %___sys_printf_loop_end19 # jmp %___sys_printf_loop_end19 ## stdlib.c 348 :___sys_printf_else20 #:___sys_printf_else20 # no else 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # b (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 48 B8 30000000 # mov_eax, %48 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 89C3 # mov_ebx,eax # %s 58 # pop_eax 99 # cdq F7FB # idiv_ebx 89D0 5B # mov_eax,edx pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 89C3 # mov_ebx,eax # /s 58 # pop_eax 99 # cdq F7FB # idiv_ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %___sys_printf_loop19 # jmp %___sys_printf_loop19 :___sys_printf_loop_end19 #:___sys_printf_loop_end19 ## stdlib.c 349 50 # push_eax # args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else21 # je %___sys_printf_else21 ## stdlib.c 350 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # b (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 45 B8 2D000000 # mov_eax, %45 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; :___sys_printf_else21 #:___sys_printf_else21 # no else :___sys_printf_else_end17 #:___sys_printf_else_end17 ## stdlib.c 352 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # 20 B8 14000000 # mov_eax, %20 50 # push_eax # b (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 353 50 # push_eax # modifier (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # >s 39C3 # cmp_eax_ebx 0F9FC0 # setg_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else22 # je %___sys_printf_else22 ## stdlib.c 354 ## stdlib.c 355 50 # push_eax # modifier (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # >s 39C3 # cmp_eax_ebx 0F9FC0 # setg_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else23 # je %___sys_printf_else23 ## stdlib.c 356 ## stdlib.c 357 50 # push_eax # sign (local) 8D85 40000000 # lea_eax,[ebp+DWORD] %64 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else24 # je %___sys_printf_else24 ## stdlib.c 358 ## stdlib.c 359 50 # push_eax # i (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 50 # push_eax # 20 B8 14000000 # mov_eax, %20 50 # push_eax # modifier (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :___sys_printf_loop25 #:___sys_printf_loop25 50 # push_eax # i (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 50 # push_eax # 20 B8 14000000 # mov_eax, %20 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else26 # je %___sys_printf_else26 E9 %___sys_printf_loop_end25 # jmp %___sys_printf_loop_end25 ## stdlib.c 360 :___sys_printf_else26 #:___sys_printf_else26 # no else 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # i (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # b (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 50 # push_eax # 20 B8 14000000 # mov_eax, %20 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else27 # je %___sys_printf_else27 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # b (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char E9 %___sys_printf_else_end27 # jmp %___sys_printf_else_end27 :___sys_printf_else27 #:___sys_printf_else27 50 # push_eax # 32 B8 20000000 # mov_eax, %32 :___sys_printf_else_end27 #:___sys_printf_else_end27 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %___sys_printf_loop25 # jmp %___sys_printf_loop25 :___sys_printf_loop_end25 #:___sys_printf_loop_end25 ## stdlib.c 361 50 # push_eax # b (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # 20 B8 14000000 # mov_eax, %20 50 # push_eax # modifier (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %___sys_printf_else_end24 # jmp %___sys_printf_else_end24 :___sys_printf_else24 #:___sys_printf_else24 ## stdlib.c 364 :___sys_printf_loop28 #:___sys_printf_loop28 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 8B00 # mov_eax,[eax] # ? 50 # push_eax # modifier (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else29 # je %___sys_printf_else29 E9 %___sys_printf_loop_end28 # jmp %___sys_printf_loop_end28 ## stdlib.c 365 :___sys_printf_else29 #:___sys_printf_else29 # no else 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # b (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %___sys_printf_loop28 # jmp %___sys_printf_loop28 :___sys_printf_loop_end28 #:___sys_printf_loop_end28 :___sys_printf_else_end24 #:___sys_printf_else_end24 ## stdlib.c 367 :___sys_printf_else23 #:___sys_printf_else23 # no else 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # modifier (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 369 :___sys_printf_else22 #:___sys_printf_else22 # no else 50 # push_eax # s (local) 8D85 30000000 # lea_eax,[ebp+DWORD] %48 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # b (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 370 50 # push_eax # args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %___sys_printf_else_end16 # jmp %___sys_printf_else_end16 :___sys_printf_else16 #:___sys_printf_else16 ## stdlib.c 372 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 117 B8 75000000 # mov_eax, %117 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else30 # je %___sys_printf_else30 ## stdlib.c 373 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 50 # push_eax # args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 375 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else31 # je %___sys_printf_else31 ## stdlib.c 376 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 48 B8 30000000 # mov_eax, %48 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; E9 %___sys_printf_else_end31 # jmp %___sys_printf_else_end31 :___sys_printf_else31 #:___sys_printf_else31 ## stdlib.c 378 ## stdlib.c 379 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # 20 B8 14000000 # mov_eax, %20 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 380 :___sys_printf_loop32 #:___sys_printf_loop32 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # > 39C3 # cmp_eax_ebx 0F97C0 # seta_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else33 # je %___sys_printf_else33 E9 %___sys_printf_loop_end32 # jmp %___sys_printf_loop_end32 ## stdlib.c 381 :___sys_printf_else33 #:___sys_printf_else33 # no else 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 48 B8 30000000 # mov_eax, %48 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 89C3 # mov_ebx,eax # % 58 # pop_eax BA 00000000 # mov_edx, %0 F7F3 # div_ebx 89D0 # mov_eax,edx 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 89C3 # mov_ebx,eax # / 58 # pop_eax BA 00000000 # mov_edx, %0 F7F3 # div_ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %___sys_printf_loop32 # jmp %___sys_printf_loop32 :___sys_printf_loop_end32 #:___sys_printf_loop_end32 ## stdlib.c 382 50 # push_eax # s (local) 8D85 30000000 # lea_eax,[ebp+DWORD] %48 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 383 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # 20 B8 14000000 # mov_eax, %20 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :___sys_printf_else_end31 #:___sys_printf_else_end31 E9 %___sys_printf_else_end30 # jmp %___sys_printf_else_end30 :___sys_printf_else30 #:___sys_printf_else30 ## stdlib.c 386 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 120 B8 78000000 # mov_eax, %120 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # || 0F85 %___sys_printf_or_end34 # jne %___sys_printf_or_end34 58 # pop_eax 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 112 B8 70000000 # mov_eax, %112 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :___sys_printf_or_end34 #:___sys_printf_or_end34 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else35 # je %___sys_printf_else35 ## stdlib.c 387 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 50 # push_eax # args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 389 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else36 # je %___sys_printf_else36 ## stdlib.c 390 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 48 B8 30000000 # mov_eax, %48 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; E9 %___sys_printf_else_end36 # jmp %___sys_printf_else_end36 :___sys_printf_else36 #:___sys_printf_else36 ## stdlib.c 392 ## stdlib.c 393 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # 20 B8 14000000 # mov_eax, %20 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 394 :___sys_printf_loop37 #:___sys_printf_loop37 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else38 # je %___sys_printf_else38 E9 %___sys_printf_loop_end37 # jmp %___sys_printf_loop_end37 ## stdlib.c 395 :___sys_printf_else38 #:___sys_printf_else38 # no else 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 15 B8 0F000000 # mov_eax, %15 5B # pop_ebx # & 21D8 # and_eax,ebx 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # < 39C3 # cmp_eax_ebx 0F92C0 # setb_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else39 # je %___sys_printf_else39 50 # push_eax # 48 B8 30000000 # mov_eax, %48 E9 %___sys_printf_else_end39 # jmp %___sys_printf_else_end39 :___sys_printf_else39 #:___sys_printf_else39 50 # push_eax # 97 B8 61000000 # mov_eax, %97 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx :___sys_printf_else_end39 #:___sys_printf_else_end39 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 15 B8 0F000000 # mov_eax, %15 5B # pop_ebx # & 21D8 # and_eax,ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; 50 # push_eax # v (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 89C1 # mov_ecx,eax # >> 58 # pop_eax D3E8 # shr_eax,cl 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %___sys_printf_loop37 # jmp %___sys_printf_loop37 :___sys_printf_loop_end37 #:___sys_printf_loop_end37 ## stdlib.c 396 50 # push_eax # s (local) 8D85 30000000 # lea_eax,[ebp+DWORD] %48 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 397 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # 20 B8 14000000 # mov_eax, %20 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :___sys_printf_else_end36 #:___sys_printf_else_end36 E9 %___sys_printf_else_end35 # jmp %___sys_printf_else_end35 :___sys_printf_else35 #:___sys_printf_else35 ## stdlib.c 400 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 99 B8 63000000 # mov_eax, %99 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else40 # je %___sys_printf_else40 ## stdlib.c 401 ## stdlib.c 402 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; E9 %___sys_printf_else_end40 # jmp %___sys_printf_else_end40 :___sys_printf_else40 #:___sys_printf_else40 ## stdlib.c 405 ## stdlib.c 406 50 # push_eax # '__sys_printf %' B8 &string_0 # mov_eax, &string_0 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputs (function) B8 &f_fputs # mov_eax, &f_fputs 81C5 44000000 # add_ebp, %68 # () FFD0 # call_eax 81ED 44000000 # sub_ebp, %68 58 # pop_eax # ; ## stdlib.c 407 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputc (function) B8 &f_fputc # mov_eax, &f_fputc 81C5 44000000 # add_ebp, %68 # () FFD0 # call_eax 81ED 44000000 # sub_ebp, %68 58 # pop_eax # ; ## stdlib.c 408 50 # push_eax # ' ' B8 &string_1 # mov_eax, &string_1 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputs (function) B8 &f_fputs # mov_eax, &f_fputs 81C5 44000000 # add_ebp, %68 # () FFD0 # call_eax 81ED 44000000 # sub_ebp, %68 58 # pop_eax # ; ## stdlib.c 409 50 # push_eax # org_format (local) 8D85 38000000 # lea_eax,[ebp+DWORD] %56 8B00 # mov_eax,[eax] # ? 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputs (function) B8 &f_fputs # mov_eax, &f_fputs 81C5 44000000 # add_ebp, %68 # () FFD0 # call_eax 81ED 44000000 # sub_ebp, %68 58 # pop_eax # ; ## stdlib.c 410 50 # push_eax # '\n' B8 &string_2 # mov_eax, &string_2 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputs (function) B8 &f_fputs # mov_eax, &f_fputs 81C5 44000000 # add_ebp, %68 # () FFD0 # call_eax 81ED 44000000 # sub_ebp, %68 58 # pop_eax # ; ## stdlib.c 411 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # exit (function) B8 &f_exit # mov_eax, &f_exit 81C5 44000000 # add_ebp, %68 # () FFD0 # call_eax 81ED 44000000 # sub_ebp, %68 58 # pop_eax # ; :___sys_printf_else_end40 #:___sys_printf_else_end40 :___sys_printf_else_end35 #:___sys_printf_else_end35 :___sys_printf_else_end30 #:___sys_printf_else_end30 :___sys_printf_else_end16 #:___sys_printf_else_end16 :___sys_printf_else_end15 #:___sys_printf_else_end15 :___sys_printf_else_end10 #:___sys_printf_else_end10 E9 %___sys_printf_else_end9 # jmp %___sys_printf_else_end9 :___sys_printf_else9 #:___sys_printf_else9 ## stdlib.c 416 ## stdlib.c 417 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 418 50 # push_eax # s (local) 8D85 30000000 # lea_eax,[ebp+DWORD] %48 50 # push_eax # buffer (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 419 50 # push_eax # l (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :___sys_printf_else_end9 #:___sys_printf_else_end9 ## stdlib.c 421 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; :___sys_printf_else7 #:___sys_printf_else7 # no else E9 %___sys_printf_loop1 # jmp %___sys_printf_loop1 :___sys_printf_loop_end1 #:___sys_printf_loop_end1 ## stdlib.c 424 50 # push_eax # len (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %___sys_printf_and_end41 # je %___sys_printf_and_end41 58 # pop_eax 50 # push_eax # trg (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al :___sys_printf_and_end41 #:___sys_printf_and_end41 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %___sys_printf_else42 # je %___sys_printf_else42 ## stdlib.c 425 50 # push_eax # trg (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 426 :___sys_printf_else42 #:___sys_printf_else42 # no else 50 # push_eax # cnt (local) 8D85 34000000 # lea_eax,[ebp+DWORD] %52 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_va_end #:f_va_end 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # ap (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fprintf #:f_fprintf 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # stream (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 435 50 # push_eax # ap (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 436 50 # push_eax # stream (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # ap (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # __sys_printf (function) B8 &f___sys_printf # mov_eax, &f___sys_printf 81C5 14000000 # add_ebp, %20 # () FFD0 # call_eax 81ED 14000000 # sub_ebp, %20 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_printf #:f_printf 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 442 50 # push_eax # ap (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 443 50 # push_eax # stdout (global) B8 &g_stdout # mov_eax, &g_stdout 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # ap (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # __sys_printf (function) B8 &f___sys_printf # mov_eax, &f___sys_printf 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_sprintf #:f_sprintf 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 449 50 # push_eax # ap (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 450 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # ap (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # __sys_printf (function) B8 &f___sys_printf # mov_eax, &f___sys_printf 81C5 14000000 # add_ebp, %20 # () FFD0 # call_eax 81ED 14000000 # sub_ebp, %20 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_snprintf #:f_snprintf 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # size (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # str (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 455 50 # push_eax # ap (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 456 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # str (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # ap (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # __sys_printf (function) B8 &f___sys_printf # mov_eax, &f___sys_printf 81C5 18000000 # add_ebp, %24 # () FFD0 # call_eax 81ED 18000000 # sub_ebp, %24 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_vsnprintf #:f_vsnprintf 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # ap (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # size (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # str (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 461 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # str (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # ap (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # __sys_printf (function) B8 &f___sys_printf # mov_eax, &f___sys_printf 81C5 14000000 # add_ebp, %20 # () FFD0 # call_eax 81ED 14000000 # sub_ebp, %20 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_open #:f_open 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # flag (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # filename (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # mode (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 477 50 # push_eax # flag (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # & 21D8 # and_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_open_else1 # je %_open_else1 ## stdlib.c 478 ## stdlib.c 480 50 # push_eax # ap (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 481 50 # push_eax # mode (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # ap (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 483 :_open_else1 #:_open_else1 # no else 50 # push_eax # 5 B8 05000000 # mov_eax, %5 50 # push_eax # filename (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # flag (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # mode (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 14000000 # add_ebp, %20 # () FFD0 # call_eax 81ED 14000000 # sub_ebp, %20 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_close #:f_close 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # fd (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 488 50 # push_eax # 6 B8 06000000 # mov_eax, %6 50 # push_eax # fd (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_read #:f_read 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # count (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # buf (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # fd (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 493 50 # push_eax # 3 B8 03000000 # mov_eax, %3 50 # push_eax # fd (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # buf (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # count (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_lseek #:f_lseek 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # whence (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # offset (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # fd (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 498 50 # push_eax # 19 B8 13000000 # mov_eax, %19 50 # push_eax # fd (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # offset (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # whence (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fopen #:f_fopen 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # pathname (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # rw (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 504 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 114 B8 72000000 # mov_eax, %114 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # || 0F85 %_fopen_or_end1 # jne %_fopen_or_end1 58 # pop_eax 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 119 B8 77000000 # mov_eax, %119 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_fopen_or_end1 #:_fopen_or_end1 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fopen_else2 # je %_fopen_else2 ## stdlib.c 505 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; :_fopen_else2 #:_fopen_else2 # no else 50 # push_eax # bin (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 507 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 98 B8 62000000 # mov_eax, %98 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fopen_else3 # je %_fopen_else3 ## stdlib.c 508 ## stdlib.c 509 50 # push_eax # bin (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 510 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; :_fopen_else3 #:_fopen_else3 # no else 50 # push_eax # plus (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 513 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 43 B8 2B000000 # mov_eax, %43 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fopen_else4 # je %_fopen_else4 ## stdlib.c 514 ## stdlib.c 515 50 # push_eax # plus (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 516 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 518 :_fopen_else4 #:_fopen_else4 # no else 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fopen_else5 # je %_fopen_else5 ## stdlib.c 519 ## stdlib.c 520 50 # push_eax # 'Mode %s should be 'r/w(b)(+)', 'w', or 'wb'\n' B8 &string_3 # mov_eax, &string_3 50 # push_eax # __var_args (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # __var_args (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # printf (function) B8 &f_printf # mov_eax, &f_printf 81C5 1C000000 # add_ebp, %28 # () FFD0 # call_eax 81ED 1C000000 # sub_ebp, %28 58 # pop_eax # ; ## stdlib.c 521 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_fopen_else5 #:_fopen_else5 # no else 50 # push_eax # open_mode (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # rw (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 114 B8 72000000 # mov_eax, %114 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fopen_else6 # je %_fopen_else6 50 # push_eax # plus (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fopen_else7 # je %_fopen_else7 50 # push_eax # 2 B8 02000000 # mov_eax, %2 E9 %_fopen_else_end7 # jmp %_fopen_else_end7 :_fopen_else7 #:_fopen_else7 50 # push_eax # 0 B8 00000000 # mov_eax, %0 :_fopen_else_end7 #:_fopen_else_end7 E9 %_fopen_else_end6 # jmp %_fopen_else_end6 :_fopen_else6 #:_fopen_else6 50 # push_eax # plus (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fopen_else8 # je %_fopen_else8 50 # push_eax # 2 B8 02000000 # mov_eax, %2 E9 %_fopen_else_end8 # jmp %_fopen_else_end8 :_fopen_else8 #:_fopen_else8 50 # push_eax # 1 B8 01000000 # mov_eax, %1 :_fopen_else_end8 #:_fopen_else_end8 50 # push_eax # 64 B8 40000000 # mov_eax, %64 5B # pop_ebx # | 09D8 # or_eax,ebx 50 # push_eax # 512 B8 00020000 # mov_eax, %512 5B # pop_ebx # | 09D8 # or_eax,ebx :_fopen_else_end6 #:_fopen_else_end6 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # fh (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 50 # push_eax # 5 B8 05000000 # mov_eax, %5 50 # push_eax # pathname (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # open_mode (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # 511 B8 FF010000 # mov_eax, %511 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 20000000 # add_ebp, %32 # () FFD0 # call_eax 81ED 20000000 # sub_ebp, %32 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 528 50 # push_eax # fh (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fopen_else9 # je %_fopen_else9 ## stdlib.c 529 ## stdlib.c 530 50 # push_eax # 'fopen %s %s returned %d\n' B8 &string_4 # mov_eax, &string_4 50 # push_eax # __var_args (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 50 # push_eax # pathname (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # __var_args (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # __var_args (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 50 # push_eax # 8 B8 08000000 # mov_eax, %8 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # fh (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # __var_args (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 50 # push_eax # printf (function) B8 &f_printf # mov_eax, &f_printf 81C5 2C000000 # add_ebp, %44 # () FFD0 # call_eax 81ED 2C000000 # sub_ebp, %44 58 # pop_eax # ; ## stdlib.c 531 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_fopen_else9 #:_fopen_else9 # no else 50 # push_eax # f (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 50 # push_eax # 8 B8 08000000 # mov_eax, %8 50 # push_eax # malloc (function) B8 &f_malloc # mov_eax, &f_malloc 81C5 24000000 # add_ebp, %36 # () FFD0 # call_eax 81ED 24000000 # sub_ebp, %36 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 534 50 # push_eax # f (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 50 # push_eax # fh (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 535 50 # push_eax # f (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 8B00 # mov_eax,[eax] # -> 81C0 04000000 # add_eax, %4 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 536 50 # push_eax # f (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fdopen #:f_fdopen 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # fd (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # f (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # 8 B8 08000000 # mov_eax, %8 50 # push_eax # malloc (function) B8 &f_malloc # mov_eax, &f_malloc 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 542 50 # push_eax # f (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 50 # push_eax # fd (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 543 50 # push_eax # f (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # -> 81C0 04000000 # add_eax, %4 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 544 50 # push_eax # f (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fclose #:f_fclose 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 549 50 # push_eax # 6 B8 06000000 # mov_eax, %6 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fflush #:f_fflush 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 555 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fseek #:f_fseek 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # whence (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # offset (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # stream (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 560 50 # push_eax # stream (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 8B00 # mov_eax,[eax] # ? 50 # push_eax # offset (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # whence (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # lseek (function) B8 &f_lseek # mov_eax, &f_lseek 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_ftell #:f_ftell 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 565 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # lseek (function) B8 &f_lseek # mov_eax, &f_lseek 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fread #:f_fread 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # nmemb (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # size (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # ptr (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # ptr (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 571 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_fread_loop1 #:_fread_loop1 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # nmemb (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fread_else2 # je %_fread_else2 E9 %_fread_loop_end1 # jmp %_fread_loop_end1 ## stdlib.c 572 :_fread_else2 #:_fread_else2 # no else 50 # push_eax # r (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 8B00 # mov_eax,[eax] # ? 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # read (function) B8 &f_read # mov_eax, &f_read 81C5 20000000 # add_ebp, %32 # () FFD0 # call_eax 81ED 20000000 # sub_ebp, %32 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 574 50 # push_eax # r (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # < 39C3 # cmp_eax_ebx 0F92C0 # setb_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fread_else3 # je %_fread_else3 ## stdlib.c 575 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret ## stdlib.c 576 :_fread_else3 #:_fread_else3 # no else 50 # push_eax # s (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_fread_loop1 # jmp %_fread_loop1 :_fread_loop_end1 #:_fread_loop_end1 ## stdlib.c 578 50 # push_eax # nmemb (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_lseek #:f_lseek 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # whence (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # offset (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # fd (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 587 50 # push_eax # 19 B8 13000000 # mov_eax, %19 50 # push_eax # fd (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # offset (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # whence (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_feof #:f_feof 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 592 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 04000000 # add_eax, %4 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fgetc #:f_fgetc 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 597 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 04000000 # add_eax, %4 8B00 # mov_eax,[eax] # ? 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fgetc_else1 # je %_fgetc_else1 ## stdlib.c 598 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_fgetc_else1 #:_fgetc_else1 # no else 50 # push_eax # ret (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # 3 B8 03000000 # mov_eax, %3 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 8B00 # mov_eax,[eax] # ? 50 # push_eax # ch (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 601 50 # push_eax # ret (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fgetc_else2 # je %_fgetc_else2 ## stdlib.c 602 ## stdlib.c 603 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 04000000 # add_eax, %4 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 604 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret ## stdlib.c 606 :_fgetc_else2 #:_fgetc_else2 # no else 50 # push_eax # ch (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_ldexp #:f_ldexp 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # exp (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # x (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # x (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 613 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_ldexp_loop1 #:_ldexp_loop1 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # exp (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_ldexp_else2 # je %_ldexp_else2 E9 %_ldexp_loop_end1 # jmp %_ldexp_loop_end1 ## stdlib.c 614 :_ldexp_else2 #:_ldexp_else2 # no else 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # x (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_ldexp_loop1 # jmp %_ldexp_loop1 :_ldexp_loop_end1 #:_ldexp_loop_end1 ## stdlib.c 615 50 # push_eax # result (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_time #:f_time 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # tloc (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 621 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'TODO time\n' B8 &string_5 # mov_eax, &string_5 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; ## stdlib.c 621 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # exit (function) B8 &f_exit # mov_eax, &f_exit 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_localtime #:f_localtime 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # timep (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 638 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'TODO localtime\n' B8 &string_6 # mov_eax, &string_6 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; ## stdlib.c 638 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # exit (function) B8 &f_exit # mov_eax, &f_exit 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_gettimeofday #:f_gettimeofday 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # tz (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # tv (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 651 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_write #:f_write 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # count (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # buf (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # fd (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 667 50 # push_eax # 4 B8 04000000 # mov_eax, %4 50 # push_eax # fd (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # buf (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # count (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fileno #:f_fileno 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 672 50 # push_eax # stream (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_getcwd #:f_getcwd 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # size (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # buf (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 681 50 # push_eax # 183 B8 B7000000 # mov_eax, %183 50 # push_eax # buf (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 58 # pop_eax # ; ## stdlib.c 682 50 # push_eax # buf (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_getenv #:f_getenv 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # name (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # len (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # name (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # strlen (function) B8 &f_strlen # mov_eax, &f_strlen 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 690 50 # push_eax # env (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # _sys_env (global) B8 &g__sys_env # mov_eax, &g__sys_env 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_getenv_loop1 #:_getenv_loop1 50 # push_eax # env (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_getenv_else2 # je %_getenv_else2 E9 %_getenv_loop_end1 # jmp %_getenv_loop_end1 ## stdlib.c 691 :_getenv_else2 #:_getenv_else2 # no else 50 # push_eax # env (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B00 # mov_eax,[eax] # ? 50 # push_eax # name (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # len (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # strncmp (function) B8 &f_strncmp # mov_eax, &f_strncmp 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %_getenv_and_end3 # je %_getenv_and_end3 58 # pop_eax 50 # push_eax # env (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B00 # mov_eax,[eax] # ? 50 # push_eax # len (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 61 B8 3D000000 # mov_eax, %61 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_getenv_and_end3 #:_getenv_and_end3 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_getenv_else4 # je %_getenv_else4 ## stdlib.c 692 50 # push_eax # env (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B00 # mov_eax,[eax] # ? 50 # push_eax # len (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_getenv_else4 #:_getenv_else4 # no else 50 # push_eax # env (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_getenv_loop1 # jmp %_getenv_loop1 :_getenv_loop_end1 #:_getenv_loop_end1 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_qsort #:f_qsort 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # compar (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # size (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # nmemb (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # base (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 698 50 # push_eax # go (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_qsort_loop1 #:_qsort_loop1 50 # push_eax # go (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_qsort_else2 # je %_qsort_else2 E9 %_qsort_loop_end1 # jmp %_qsort_loop_end1 ## stdlib.c 699 ## stdlib.c 700 :_qsort_else2 #:_qsort_else2 # no else 50 # push_eax # go (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 701 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_qsort_loop3 #:_qsort_loop3 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # nmemb (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_qsort_else4 # je %_qsort_else4 E9 %_qsort_loop_end3 # jmp %_qsort_loop_end3 ## stdlib.c 702 :_qsort_else4 #:_qsort_else4 # no else 50 # push_eax # arg1 (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 50 # push_eax # base (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # arg2 (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 50 # push_eax # base (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # size (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # sign (local) 8D85 24000000 # lea_eax,[ebp+DWORD] %36 50 # push_eax # arg1 (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 50 # push_eax # arg2 (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 8B00 # mov_eax,[eax] # ? 50 # push_eax # compar (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 81C5 28000000 # add_ebp, %40 # () FFD0 # call_eax 81ED 28000000 # sub_ebp, %40 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 706 50 # push_eax # sign (local) 8D85 24000000 # lea_eax,[ebp+DWORD] %36 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # >s 39C3 # cmp_eax_ebx 0F9FC0 # setg_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_qsort_else5 # je %_qsort_else5 ## stdlib.c 707 ## stdlib.c 708 50 # push_eax # go (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 709 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_qsort_loop6 #:_qsort_loop6 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_qsort_else7 # je %_qsort_else7 E9 %_qsort_loop_end6 # jmp %_qsort_loop_end6 ## stdlib.c 710 :_qsort_else7 #:_qsort_else7 # no else 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 8B00 # mov_eax,[eax] # ? 50 # push_eax # 3 B8 03000000 # mov_eax, %3 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # size (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_qsort_else8 # je %_qsort_else8 ## stdlib.c 711 50 # push_eax # h (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # arg1 (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 714 50 # push_eax # arg1 (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # arg2 (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 8B00 # mov_eax,[eax] # ? 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 715 50 # push_eax # arg2 (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 8B00 # mov_eax,[eax] # ? 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # h (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 716 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 3 B8 03000000 # mov_eax, %3 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %_qsort_else_end8 # jmp %_qsort_else_end8 :_qsort_else8 #:_qsort_else8 ## stdlib.c 719 50 # push_eax # h (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 50 # push_eax # arg1 (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 722 50 # push_eax # arg1 (local) 8D85 1C000000 # lea_eax,[ebp+DWORD] %28 8B00 # mov_eax,[eax] # ? 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # arg2 (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 8B00 # mov_eax,[eax] # ? 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 723 50 # push_eax # arg2 (local) 8D85 20000000 # lea_eax,[ebp+DWORD] %32 8B00 # mov_eax,[eax] # ? 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # h (local) 8D85 2C000000 # lea_eax,[ebp+DWORD] %44 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; :_qsort_else_end8 #:_qsort_else_end8 50 # push_eax # j (local) 8D85 28000000 # lea_eax,[ebp+DWORD] %40 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_qsort_loop6 # jmp %_qsort_loop6 :_qsort_loop_end6 #:_qsort_loop_end6 :_qsort_else5 #:_qsort_else5 # no else 50 # push_eax # i (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_qsort_loop3 # jmp %_qsort_loop3 :_qsort_loop_end3 #:_qsort_loop_end3 E9 %_qsort_loop1 # jmp %_qsort_loop1 :_qsort_loop_end1 #:_qsort_loop_end1 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_time #:f_time 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # tloc (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 733 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'TODO time\n' B8 &string_5 # mov_eax, &string_5 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; ## stdlib.c 733 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # exit (function) B8 &f_exit # mov_eax, &f_exit 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_setjmp #:f_setjmp 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # env (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 739 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'TODO setjmp\n' B8 &string_7 # mov_eax, &string_7 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; ## stdlib.c 739 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # exit (function) B8 &f_exit # mov_eax, &f_exit 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; ## stdlib.c 740 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_longjmp #:f_longjmp 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # val (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # env (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 746 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'TODO longjmp\n' B8 &string_8 # mov_eax, &string_8 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 58 # pop_eax # ; ## stdlib.c 746 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # exit (function) B8 &f_exit # mov_eax, &f_exit 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 58 # pop_eax # ; ## stdlib.c 747 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 50 # push_eax # exit (function) B8 &f_exit # mov_eax, &f_exit 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_unlink #:f_unlink 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # pathname (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 752 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 50 # push_eax # pathname (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_sscanf #:f_sscanf 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 758 50 # push_eax # ap (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # __var_args (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # args_parsed (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 762 :_sscanf_loop1 #:_sscanf_loop1 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_sscanf_else2 # je %_sscanf_else2 E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1 ## stdlib.c 763 :_sscanf_else2 #:_sscanf_else2 # no else 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_sscanf_else3 # je %_sscanf_else3 ## stdlib.c 764 E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1 E9 %_sscanf_else_end3 # jmp %_sscanf_else_end3 :_sscanf_else3 #:_sscanf_else3 ## stdlib.c 765 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 37 B8 25000000 # mov_eax, %37 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_sscanf_else4 # je %_sscanf_else4 ## stdlib.c 766 ## stdlib.c 767 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 768 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 100 B8 64000000 # mov_eax, %100 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_sscanf_else5 # je %_sscanf_else5 ## stdlib.c 769 ## stdlib.c 770 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; 50 # push_eax # v (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 772 :_sscanf_loop6 #:_sscanf_loop6 50 # push_eax # 48 B8 30000000 # mov_eax, %48 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %_sscanf_and_end7 # je %_sscanf_and_end7 58 # pop_eax 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 57 B8 39000000 # mov_eax, %57 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al :_sscanf_and_end7 #:_sscanf_and_end7 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_sscanf_else8 # je %_sscanf_else8 E9 %_sscanf_loop_end6 # jmp %_sscanf_loop_end6 ## stdlib.c 773 ## stdlib.c 774 :_sscanf_else8 #:_sscanf_else8 # no else 50 # push_eax # v (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 50 # push_eax # v (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 48 B8 30000000 # mov_eax, %48 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 775 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_sscanf_loop6 # jmp %_sscanf_loop6 :_sscanf_loop_end6 #:_sscanf_loop_end6 ## stdlib.c 777 50 # push_eax # ap (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 8B00 # mov_eax,[eax] # ? 50 # push_eax # v (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 778 50 # push_eax # ap (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 779 50 # push_eax # args_parsed (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_sscanf_else_end5 # jmp %_sscanf_else_end5 :_sscanf_else5 #:_sscanf_else5 ## stdlib.c 782 ## stdlib.c 783 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'sscanf: format %%%c not supported\n' B8 &string_9 # mov_eax, &string_9 50 # push_eax # __var_args (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # __var_args (local) 8D85 18000000 # lea_eax,[ebp+DWORD] %24 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 1C000000 # add_ebp, %28 # () FFD0 # call_eax 81ED 1C000000 # sub_ebp, %28 58 # pop_eax # ; ## stdlib.c 784 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # exit (function) B8 &f_exit # mov_eax, &f_exit 81C5 18000000 # add_ebp, %24 # () FFD0 # call_eax 81ED 18000000 # sub_ebp, %24 58 # pop_eax # ; :_sscanf_else_end5 #:_sscanf_else_end5 E9 %_sscanf_else_end4 # jmp %_sscanf_else_end4 :_sscanf_else4 #:_sscanf_else4 ## stdlib.c 788 ## stdlib.c 789 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_sscanf_else9 # je %_sscanf_else9 ## stdlib.c 790 E9 %_sscanf_loop_end1 # jmp %_sscanf_loop_end1 ## stdlib.c 791 :_sscanf_else9 #:_sscanf_else9 # no else 50 # push_eax # format (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## stdlib.c 792 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; :_sscanf_else_end4 #:_sscanf_else_end4 :_sscanf_else_end3 #:_sscanf_else_end3 E9 %_sscanf_loop1 # jmp %_sscanf_loop1 :_sscanf_loop_end1 #:_sscanf_loop_end1 ## stdlib.c 794 50 # push_eax # args_parsed (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_atoi #:f_atoi 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # nptr (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 800 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'TODO atoi\n' B8 &string_10 # mov_eax, &string_10 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; ## stdlib.c 800 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # exit (function) B8 &f_exit # mov_eax, &f_exit 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_remove #:f_remove 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # pathname (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 805 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 50 # push_eax # pathname (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_execvp #:f_execvp 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # argv (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # file (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 811 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'TODO execvp\n' B8 &string_11 # mov_eax, &string_11 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 58 # pop_eax # ; ## stdlib.c 811 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # exit (function) B8 &f_exit # mov_eax, &f_exit 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_mkdir #:f_mkdir 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # pathname (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 816 50 # push_eax # 39 B8 27000000 # mov_eax, %39 50 # push_eax # pathname (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_chdir #:f_chdir 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # path (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 821 50 # push_eax # 12 B8 0C000000 # mov_eax, %12 50 # push_eax # path (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_access #:f_access 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # filename (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 826 50 # push_eax # 33 B8 21000000 # mov_eax, %33 50 # push_eax # filename (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_chmod #:f_chmod 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # filename (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 831 50 # push_eax # 15 B8 0F000000 # mov_eax, %15 50 # push_eax # filename (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # mode (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_symlink #:f_symlink 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # linkpath (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # target (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 836 50 # push_eax # 83 B8 53000000 # mov_eax, %83 50 # push_eax # target (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # linkpath (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_uname #:f_uname 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # buf (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 854 50 # push_eax # 109 B8 6D000000 # mov_eax, %109 50 # push_eax # buf (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 08000000 # add_ebp, %8 # () FFD0 # call_eax 81ED 08000000 # sub_ebp, %8 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_execve #:f_execve 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # env (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # argv (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # program (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 859 50 # push_eax # 11 B8 0B000000 # mov_eax, %11 50 # push_eax # program (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # argv (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # env (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # sys_int80 (function) B8 &f_sys_int80 # mov_eax, &f_sys_int80 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fgets #:f_fgets 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # f (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # len (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## stdlib.c 864 50 # push_eax # f (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # feof (function) B8 &f_feof # mov_eax, &f_feof 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fgets_else1 # je %_fgets_else1 ## stdlib.c 865 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret ## stdlib.c 867 :_fgets_else1 #:_fgets_else1 # no else 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_fgets_loop2 #:_fgets_loop2 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # len (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fgets_else3 # je %_fgets_else3 E9 %_fgets_loop_end2 # jmp %_fgets_loop_end2 ## stdlib.c 868 :_fgets_else3 #:_fgets_else3 # no else 50 # push_eax # ch (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # f (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # fgetc (function) B8 &f_fgetc # mov_eax, &f_fgetc 81C5 18000000 # add_ebp, %24 # () FFD0 # call_eax 81ED 18000000 # sub_ebp, %24 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## stdlib.c 870 50 # push_eax # ch (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fgets_else4 # je %_fgets_else4 ## stdlib.c 871 ## stdlib.c 872 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 873 E9 %_fgets_loop_end2 # jmp %_fgets_loop_end2 ## stdlib.c 875 :_fgets_else4 #:_fgets_else4 # no else 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # ch (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 876 50 # push_eax # ch (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8B00 # mov_eax,[eax] # ? 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fgets_else5 # je %_fgets_else5 ## stdlib.c 877 ## stdlib.c 878 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## stdlib.c 879 E9 %_fgets_loop_end2 # jmp %_fgets_loop_end2 :_fgets_else5 #:_fgets_else5 # no else 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_fgets_loop2 # jmp %_fgets_loop2 :_fgets_loop_end2 #:_fgets_loop_end2 ## stdlib.c 882 50 # push_eax # str (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_fgets #:f_fgets 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # f (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # size (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # buffer (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 10 :_fgets_loop1 #:_fgets_loop1 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # size (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fgets_else2 # je %_fgets_else2 E9 %_fgets_loop_end1 # jmp %_fgets_loop_end1 ## M1.c 11 :_fgets_else2 #:_fgets_else2 # no else ## M1.c 13 50 # push_eax # f (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 8B00 # mov_eax,[eax] # ? 50 # push_eax # ch (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 50 # push_eax # 1 B8 01000000 # mov_eax, %1 50 # push_eax # read (function) B8 &f_read # mov_eax, &f_read 81C5 18000000 # add_ebp, %24 # () FFD0 # call_eax 81ED 18000000 # sub_ebp, %24 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fgets_else3 # je %_fgets_else3 ## M1.c 14 ## M1.c 15 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fgets_else4 # je %_fgets_else4 ## M1.c 16 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret ## M1.c 17 :_fgets_else4 #:_fgets_else4 # no else E9 %_fgets_loop_end1 # jmp %_fgets_loop_end1 ## M1.c 19 :_fgets_else3 #:_fgets_else3 # no else 50 # push_eax # buffer (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # ch (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## M1.c 20 50 # push_eax # ch (local) 8D85 14000000 # lea_eax,[ebp+DWORD] %20 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_fgets_else5 # je %_fgets_else5 ## M1.c 21 E9 %_fgets_loop_end1 # jmp %_fgets_loop_end1 :_fgets_else5 #:_fgets_else5 # no else E9 %_fgets_loop1 # jmp %_fgets_loop1 :_fgets_loop_end1 #:_fgets_loop_end1 ## M1.c 23 50 # push_eax # buffer (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 10000000 # lea_eax,[ebp+DWORD] %16 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## M1.c 24 50 # push_eax # 1 B8 01000000 # mov_eax, %1 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_add_define #:f_add_define 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # value (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # name (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # new_define (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # 44 B8 2C000000 # mov_eax, %44 50 # push_eax # malloc (function) B8 &f_malloc # mov_eax, &f_malloc 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 42 50 # push_eax # new_define (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 50 # push_eax # name (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # 19 B8 13000000 # mov_eax, %19 50 # push_eax # strncpy (function) B8 &f_strncpy # mov_eax, &f_strncpy 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 58 # pop_eax # ; ## M1.c 43 50 # push_eax # new_define (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 50 # push_eax # 19 B8 13000000 # mov_eax, %19 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## M1.c 44 50 # push_eax # new_define (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # -> 81C0 14000000 # add_eax, %20 50 # push_eax # value (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # 19 B8 13000000 # mov_eax, %19 50 # push_eax # strncpy (function) B8 &f_strncpy # mov_eax, &f_strncpy 81C5 10000000 # add_ebp, %16 # () FFD0 # call_eax 81ED 10000000 # sub_ebp, %16 58 # pop_eax # ; ## M1.c 45 50 # push_eax # new_define (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # -> 81C0 14000000 # add_eax, %20 50 # push_eax # 19 B8 13000000 # mov_eax, %19 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## M1.c 46 50 # push_eax # new_define (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # -> 81C0 28000000 # add_eax, %40 50 # push_eax # defines (global) B8 &g_defines # mov_eax, &g_defines 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 47 50 # push_eax # defines (global) B8 &g_defines # mov_eax, &g_defines 50 # push_eax # new_define (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_find_define #:f_find_define 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # name (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## M1.c 52 50 # push_eax # def (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # defines (global) B8 &g_defines # mov_eax, &g_defines 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_find_define_loop1 #:_find_define_loop1 50 # push_eax # def (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_find_define_else2 # je %_find_define_else2 E9 %_find_define_loop_end1 # jmp %_find_define_loop_end1 ## M1.c 53 :_find_define_else2 #:_find_define_else2 # no else 50 # push_eax # def (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # -> 81C0 00000000 # add_eax, %0 50 # push_eax # name (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # strcmp (function) B8 &f_strcmp # mov_eax, &f_strcmp 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_find_define_else3 # je %_find_define_else3 ## M1.c 54 50 # push_eax # def (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # -> 81C0 14000000 # add_eax, %20 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_find_define_else3 #:_find_define_else3 # no else 50 # push_eax # def (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 50 # push_eax # def (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # -> 81C0 28000000 # add_eax, %40 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %_find_define_loop1 # jmp %_find_define_loop1 :_find_define_loop_end1 #:_find_define_loop_end1 ## M1.c 55 50 # push_eax # name (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_output_hex #:f_output_hex 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # f (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # ch (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax ## M1.c 60 50 # push_eax # ch (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # ch (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_output_hex_else1 # je %_output_hex_else1 50 # push_eax # 48 B8 30000000 # mov_eax, %48 E9 %_output_hex_else_end1 # jmp %_output_hex_else_end1 :_output_hex_else1 #:_output_hex_else1 50 # push_eax # 65 B8 41000000 # mov_eax, %65 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx :_output_hex_else_end1 #:_output_hex_else_end1 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # f (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputc (function) B8 &f_fputc # mov_eax, &f_fputc 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f_main #:f_main 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # argv (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # argc (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 5B # pop_ebx # =: 8918 # mov_[eax],ebx 58 # pop_eax 50 # push_eax # __init_globals__ (function) B8 &f___init_globals__ # mov_eax, &f___init_globals__ 81C5 0C000000 # add_ebp, %12 # () FFD0 # call_eax 81ED 0C000000 # sub_ebp, %12 50 # push_eax # _sys_env (global) B8 &g__sys_env # mov_eax, &g__sys_env 50 # push_eax # argv (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # argc (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # nr_input_files (local) 8D85 34000000 # lea_eax,[ebp+DWORD] %52 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # output_file (local) 8D85 38000000 # lea_eax,[ebp+DWORD] %56 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 68 50 # push_eax # i (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_main_loop1 #:_main_loop1 50 # push_eax # i (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # argc (local) 8D85 08000000 # lea_eax,[ebp+DWORD] %8 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else2 # je %_main_else2 E9 %_main_loop_end1 # jmp %_main_loop_end1 ## M1.c 69 :_main_else2 #:_main_else2 # no else 50 # push_eax # argv (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 8B00 # mov_eax,[eax] # ? 50 # push_eax # '-o' B8 &string_12 # mov_eax, &string_12 50 # push_eax # strcmp (function) B8 &f_strcmp # mov_eax, &f_strcmp 81C5 40000000 # add_ebp, %64 # () FFD0 # call_eax 81ED 40000000 # sub_ebp, %64 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else3 # je %_main_else3 ## M1.c 70 ## M1.c 71 50 # push_eax # i (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## M1.c 72 50 # push_eax # output_file (local) 8D85 38000000 # lea_eax,[ebp+DWORD] %56 50 # push_eax # argv (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %_main_else_end3 # jmp %_main_else_end3 :_main_else3 #:_main_else3 ## M1.c 75 50 # push_eax # input_files (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # nr_input_files (local) 8D85 34000000 # lea_eax,[ebp+DWORD] %52 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # argv (local) 8D85 04000000 # lea_eax,[ebp+DWORD] %4 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_main_else_end3 #:_main_else_end3 50 # push_eax # i (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_loop1 # jmp %_main_loop1 :_main_loop_end1 #:_main_loop_end1 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 50 # push_eax # stdout (global) B8 &g_stdout # mov_eax, &g_stdout 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 78 50 # push_eax # output_file (local) 8D85 38000000 # lea_eax,[ebp+DWORD] %56 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else4 # je %_main_else4 ## M1.c 79 ## M1.c 80 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 50 # push_eax # output_file (local) 8D85 38000000 # lea_eax,[ebp+DWORD] %56 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'w' B8 &string_13 # mov_eax, &string_13 50 # push_eax # fopen (function) B8 &f_fopen # mov_eax, &f_fopen 81C5 40000000 # add_ebp, %64 # () FFD0 # call_eax 81ED 40000000 # sub_ebp, %64 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 81 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else5 # je %_main_else5 ## M1.c 82 ## M1.c 83 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'Error: Cannot open file '%s' for writing' B8 &string_14 # mov_eax, &string_14 50 # push_eax # __var_args (local) 8D85 40000000 # lea_eax,[ebp+DWORD] %64 50 # push_eax # output_file (local) 8D85 38000000 # lea_eax,[ebp+DWORD] %56 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # __var_args (local) 8D85 40000000 # lea_eax,[ebp+DWORD] %64 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 44000000 # add_ebp, %68 # () FFD0 # call_eax 81ED 44000000 # sub_ebp, %68 58 # pop_eax # ; ## M1.c 84 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_main_else5 #:_main_else5 # no else ## M1.c 88 :_main_else4 #:_main_else4 # no else 50 # push_eax # i (local) 8D85 40000000 # lea_eax,[ebp+DWORD] %64 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_main_loop6 #:_main_loop6 50 # push_eax # i (local) 8D85 40000000 # lea_eax,[ebp+DWORD] %64 8B00 # mov_eax,[eax] # ? 50 # push_eax # nr_input_files (local) 8D85 34000000 # lea_eax,[ebp+DWORD] %52 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else7 # je %_main_else7 E9 %_main_loop_end6 # jmp %_main_loop_end6 ## M1.c 89 :_main_else7 #:_main_else7 # no else 50 # push_eax # fin (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 50 # push_eax # input_files (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # i (local) 8D85 40000000 # lea_eax,[ebp+DWORD] %64 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'r' B8 &string_15 # mov_eax, &string_15 50 # push_eax # fopen (function) B8 &f_fopen # mov_eax, &f_fopen 81C5 48000000 # add_ebp, %72 # () FFD0 # call_eax 81ED 48000000 # sub_ebp, %72 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 91 50 # push_eax # fin (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else8 # je %_main_else8 ## M1.c 92 ## M1.c 93 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 8B00 # mov_eax,[eax] # ? 50 # push_eax # 'Cannot open %s for reading\n' B8 &string_16 # mov_eax, &string_16 50 # push_eax # __var_args (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # input_files (local) 8D85 0C000000 # lea_eax,[ebp+DWORD] %12 50 # push_eax # i (local) 8D85 40000000 # lea_eax,[ebp+DWORD] %64 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # + 01D8 # add_eax,ebx 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # __var_args (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 4C000000 # add_ebp, %76 # () FFD0 # call_eax 81ED 4C000000 # sub_ebp, %76 58 # pop_eax # ; ## M1.c 94 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret :_main_else8 #:_main_else8 # no else ## M1.c 98 :_main_loop9 #:_main_loop9 50 # push_eax # line (static) B8 &static_0_line # mov_eax, &static_0_line 50 # push_eax # 99999 B8 9F860100 # mov_eax, %99999 50 # push_eax # fin (local) 8D85 44000000 # lea_eax,[ebp+DWORD] %68 8B00 # mov_eax,[eax] # ? 50 # push_eax # fgets (function) B8 &f_fgets # mov_eax, &f_fgets 81C5 48000000 # add_ebp, %72 # () FFD0 # call_eax 81ED 48000000 # sub_ebp, %72 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else10 # je %_main_else10 E9 %_main_loop_end9 # jmp %_main_loop_end9 ## M1.c 99 ## M1.c 100 :_main_else10 #:_main_else10 # no else 50 # push_eax # line (static) B8 &static_0_line # mov_eax, &static_0_line 50 # push_eax # 'DEFINE ' B8 &string_17 # mov_eax, &string_17 50 # push_eax # 7 B8 07000000 # mov_eax, %7 50 # push_eax # strncmp (function) B8 &f_strncmp # mov_eax, &f_strncmp 81C5 48000000 # add_ebp, %72 # () FFD0 # call_eax 81ED 48000000 # sub_ebp, %72 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else11 # je %_main_else11 ## M1.c 101 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # line (static) B8 &static_0_line # mov_eax, &static_0_line 50 # push_eax # 7 B8 07000000 # mov_eax, %7 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 103 :_main_loop12 #:_main_loop12 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else13 # je %_main_else13 E9 %_main_loop_end12 # jmp %_main_loop_end12 ## M1.c 103 :_main_else13 #:_main_else13 # no else 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_loop12 # jmp %_main_loop12 :_main_loop_end12 #:_main_loop_end12 50 # push_eax # name (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 105 :_main_loop14 #:_main_loop14 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # >s 39C3 # cmp_eax_ebx 0F9FC0 # setg_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else15 # je %_main_else15 E9 %_main_loop_end14 # jmp %_main_loop_end14 ## M1.c 106 :_main_else15 #:_main_else15 # no else 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_loop14 # jmp %_main_loop14 :_main_loop_end14 #:_main_loop_end14 ## M1.c 107 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else16 # je %_main_else16 ## M1.c 108 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## M1.c 109 :_main_else16 #:_main_else16 # no else :_main_loop17 #:_main_loop17 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else18 # je %_main_else18 E9 %_main_loop_end17 # jmp %_main_loop_end17 ## M1.c 109 :_main_else18 #:_main_else18 # no else 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_loop17 # jmp %_main_loop17 :_main_loop_end17 #:_main_loop_end17 50 # push_eax # value (local) 8D85 50000000 # lea_eax,[ebp+DWORD] %80 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 111 :_main_loop19 #:_main_loop19 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # >s 39C3 # cmp_eax_ebx 0F9FC0 # setg_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else20 # je %_main_else20 E9 %_main_loop_end19 # jmp %_main_loop_end19 ## M1.c 112 :_main_else20 #:_main_else20 # no else 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_loop19 # jmp %_main_loop19 :_main_loop_end19 #:_main_loop_end19 ## M1.c 113 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else21 # je %_main_else21 ## M1.c 114 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## M1.c 115 :_main_else21 #:_main_else21 # no else 50 # push_eax # name (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 50 # push_eax # value (local) 8D85 50000000 # lea_eax,[ebp+DWORD] %80 8B00 # mov_eax,[eax] # ? 50 # push_eax # add_define (function) B8 &f_add_define # mov_eax, &f_add_define 81C5 54000000 # add_ebp, %84 # () FFD0 # call_eax 81ED 54000000 # sub_ebp, %84 58 # pop_eax # ; E9 %_main_else_end11 # jmp %_main_else_end11 :_main_else11 #:_main_else11 ## M1.c 118 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # line (static) B8 &static_0_line # mov_eax, &static_0_line 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 120 :_main_loop22 #:_main_loop22 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # || 0F85 %_main_or_end23 # jne %_main_or_end23 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 9 B8 09000000 # mov_eax, %9 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_main_or_end23 #:_main_or_end23 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else24 # je %_main_else24 E9 %_main_loop_end22 # jmp %_main_loop_end22 ## M1.c 121 :_main_else24 #:_main_else24 # no else 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_loop22 # jmp %_main_loop22 :_main_loop_end22 #:_main_loop_end22 ## M1.c 122 :_main_loop25 #:_main_loop25 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %_main_and_end26 # je %_main_and_end26 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 13 B8 0D000000 # mov_eax, %13 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al :_main_and_end26 #:_main_and_end26 85C0 # test_eax,eax # && 0F84 %_main_and_end27 # je %_main_and_end27 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al :_main_and_end27 #:_main_and_end27 85C0 # test_eax,eax # && 0F84 %_main_and_end28 # je %_main_and_end28 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 35 B8 23000000 # mov_eax, %35 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al :_main_and_end28 #:_main_and_end28 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else29 # je %_main_else29 E9 %_main_loop_end25 # jmp %_main_loop_end25 ## M1.c 123 ## M1.c 124 :_main_else29 #:_main_else29 # no else 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else30 # je %_main_else30 ## M1.c 125 ## M1.c 126 50 # push_eax # 32 B8 20000000 # mov_eax, %32 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputc (function) B8 &f_fputc # mov_eax, &f_fputc 81C5 4C000000 # add_ebp, %76 # () FFD0 # call_eax 81ED 4C000000 # sub_ebp, %76 58 # pop_eax # ; ## M1.c 127 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_else_end30 # jmp %_main_else_end30 :_main_else30 #:_main_else30 ## M1.c 129 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 37 B8 25000000 # mov_eax, %37 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # || 0F85 %_main_or_end31 # jne %_main_or_end31 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 33 B8 21000000 # mov_eax, %33 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_main_or_end31 #:_main_or_end31 85C0 # test_eax,eax # && 0F84 %_main_and_end32 # je %_main_and_end32 58 # pop_eax 50 # push_eax # 48 B8 30000000 # mov_eax, %48 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %_main_and_end33 # je %_main_and_end33 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 57 B8 39000000 # mov_eax, %57 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al :_main_and_end33 #:_main_and_end33 85C0 # test_eax,eax # || 0F85 %_main_or_end34 # jne %_main_or_end34 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 45 B8 2D000000 # mov_eax, %45 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_main_or_end34 #:_main_or_end34 :_main_and_end32 #:_main_and_end32 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else35 # je %_main_else35 ## M1.c 130 50 # push_eax # nr_bits (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 37 B8 25000000 # mov_eax, %37 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else36 # je %_main_else36 50 # push_eax # 32 B8 20000000 # mov_eax, %32 E9 %_main_else_end36 # jmp %_main_else_end36 :_main_else36 #:_main_else36 50 # push_eax # 8 B8 08000000 # mov_eax, %8 :_main_else_end36 #:_main_else_end36 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 132 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; 50 # push_eax # sign (local) 8D85 50000000 # lea_eax,[ebp+DWORD] %80 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 134 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 45 B8 2D000000 # mov_eax, %45 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else37 # je %_main_else37 ## M1.c 135 ## M1.c 136 50 # push_eax # sign (local) 8D85 50000000 # lea_eax,[ebp+DWORD] %80 50 # push_eax # 4294967295 B8 FFFFFFFF # mov_eax, %4294967295 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 137 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; :_main_else37 #:_main_else37 # no else 50 # push_eax # v (local) 8D85 54000000 # lea_eax,[ebp+DWORD] %84 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 140 :_main_loop38 #:_main_loop38 50 # push_eax # 48 B8 30000000 # mov_eax, %48 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %_main_and_end39 # je %_main_and_end39 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 57 B8 39000000 # mov_eax, %57 5B # pop_ebx # <=s 39C3 # cmp_eax_ebx 0F9EC0 # setle_al 0FB6C0 # movzx_eax,al :_main_and_end39 #:_main_and_end39 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else40 # je %_main_else40 E9 %_main_loop_end38 # jmp %_main_loop_end38 ## M1.c 141 :_main_else40 #:_main_else40 # no else 50 # push_eax # v (local) 8D85 54000000 # lea_eax,[ebp+DWORD] %84 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 50 # push_eax # v (local) 8D85 54000000 # lea_eax,[ebp+DWORD] %84 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 48 B8 30000000 # mov_eax, %48 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_loop38 # jmp %_main_loop38 :_main_loop_end38 #:_main_loop_end38 ## M1.c 142 50 # push_eax # v (local) 8D85 54000000 # lea_eax,[ebp+DWORD] %84 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # sign (local) 8D85 50000000 # lea_eax,[ebp+DWORD] %80 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # * F7E3 # mul_ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 143 50 # push_eax # i (local) 8D85 58000000 # lea_eax,[ebp+DWORD] %88 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_main_loop41 #:_main_loop41 50 # push_eax # i (local) 8D85 58000000 # lea_eax,[ebp+DWORD] %88 8B00 # mov_eax,[eax] # ? 50 # push_eax # nr_bits (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # <s 39C3 # cmp_eax_ebx 0F9CC0 # setl_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else42 # je %_main_else42 E9 %_main_loop_end41 # jmp %_main_loop_end41 ## M1.c 144 ## M1.c 145 :_main_else42 #:_main_else42 # no else 50 # push_eax # v (local) 8D85 54000000 # lea_eax,[ebp+DWORD] %84 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 58000000 # lea_eax,[ebp+DWORD] %88 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 89C1 # mov_ecx,eax # >> 58 # pop_eax D3E8 # shr_eax,cl 50 # push_eax # 15 B8 0F000000 # mov_eax, %15 5B # pop_ebx # & 21D8 # and_eax,ebx 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # output_hex (function) B8 &f_output_hex # mov_eax, &f_output_hex 81C5 5C000000 # add_ebp, %92 # () FFD0 # call_eax 81ED 5C000000 # sub_ebp, %92 58 # pop_eax # ; ## M1.c 146 50 # push_eax # v (local) 8D85 54000000 # lea_eax,[ebp+DWORD] %84 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 58000000 # lea_eax,[ebp+DWORD] %88 8B00 # mov_eax,[eax] # ? 89C1 # mov_ecx,eax # >> 58 # pop_eax D3E8 # shr_eax,cl 50 # push_eax # 15 B8 0F000000 # mov_eax, %15 5B # pop_ebx # & 21D8 # and_eax,ebx 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # output_hex (function) B8 &f_output_hex # mov_eax, &f_output_hex 81C5 5C000000 # add_ebp, %92 # () FFD0 # call_eax 81ED 5C000000 # sub_ebp, %92 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 58000000 # lea_eax,[ebp+DWORD] %88 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 8 B8 08000000 # mov_eax, %8 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; E9 %_main_loop41 # jmp %_main_loop41 :_main_loop_end41 #:_main_loop_end41 E9 %_main_else_end35 # jmp %_main_else_end35 :_main_else35 #:_main_else35 ## M1.c 149 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 37 B8 25000000 # mov_eax, %37 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # || 0F85 %_main_or_end43 # jne %_main_or_end43 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 58 B8 3A000000 # mov_eax, %58 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_main_or_end43 #:_main_or_end43 85C0 # test_eax,eax # || 0F85 %_main_or_end44 # jne %_main_or_end44 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 35 B8 23000000 # mov_eax, %35 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_main_or_end44 #:_main_or_end44 85C0 # test_eax,eax # || 0F85 %_main_or_end45 # jne %_main_or_end45 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 38 B8 26000000 # mov_eax, %38 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al :_main_or_end45 #:_main_or_end45 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else46 # je %_main_else46 ## M1.c 150 ## M1.c 151 :_main_loop47 #:_main_loop47 ## M1.c 152 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputc (function) B8 &f_fputc # mov_eax, &f_fputc 81C5 4C000000 # add_ebp, %76 # () FFD0 # call_eax 81ED 4C000000 # sub_ebp, %76 58 # pop_eax # ; 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # >s 39C3 # cmp_eax_ebx 0F9FC0 # setg_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else48 # je %_main_else48 E9 %_main_loop_end47 # jmp %_main_loop_end47 :_main_else48 #:_main_else48 # no else E9 %_main_loop47 # jmp %_main_loop47 :_main_loop_end47 #:_main_loop_end47 E9 %_main_else_end46 # jmp %_main_else_end46 :_main_else46 #:_main_else46 ## M1.c 155 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 34 B8 22000000 # mov_eax, %34 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else49 # je %_main_else49 ## M1.c 156 ## M1.c 157 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; ## M1.c 158 :_main_loop50 #:_main_loop50 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 34 B8 22000000 # mov_eax, %34 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # && 0F84 %_main_and_end51 # je %_main_and_end51 58 # pop_eax 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al :_main_and_end51 #:_main_and_end51 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else52 # je %_main_else52 E9 %_main_loop_end50 # jmp %_main_loop_end50 ## M1.c 159 :_main_else52 #:_main_else52 # no else 50 # push_eax # v (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 161 50 # push_eax # v (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 50 # push_eax # 4 B8 04000000 # mov_eax, %4 89C1 # mov_ecx,eax # >> 58 # pop_eax D3E8 # shr_eax,cl 50 # push_eax # 15 B8 0F000000 # mov_eax, %15 5B # pop_ebx # & 21D8 # and_eax,ebx 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # output_hex (function) B8 &f_output_hex # mov_eax, &f_output_hex 81C5 50000000 # add_ebp, %80 # () FFD0 # call_eax 81ED 50000000 # sub_ebp, %80 58 # pop_eax # ; ## M1.c 162 50 # push_eax # v (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 50 # push_eax # 15 B8 0F000000 # mov_eax, %15 5B # pop_ebx # & 21D8 # and_eax,ebx 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # output_hex (function) B8 &f_output_hex # mov_eax, &f_output_hex 81C5 50000000 # add_ebp, %80 # () FFD0 # call_eax 81ED 50000000 # sub_ebp, %80 58 # pop_eax # ; E9 %_main_loop50 # jmp %_main_loop50 :_main_loop_end50 #:_main_loop_end50 ## M1.c 164 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # '00 ' B8 &string_18 # mov_eax, &string_18 50 # push_eax # 0 B8 00000000 # mov_eax, %0 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 4C000000 # add_ebp, %76 # () FFD0 # call_eax 81ED 4C000000 # sub_ebp, %76 58 # pop_eax # ; ## M1.c 165 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 34 B8 22000000 # mov_eax, %34 5B # pop_ebx # == 39C3 # cmp_eax_ebx 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else53 # je %_main_else53 ## M1.c 166 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; :_main_else53 #:_main_else53 # no else E9 %_main_else_end49 # jmp %_main_else_end49 :_main_else49 #:_main_else49 ## M1.c 169 50 # push_eax # i (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 171 :_main_loop54 #:_main_loop54 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 32 B8 20000000 # mov_eax, %32 5B # pop_ebx # >s 39C3 # cmp_eax_ebx 0F9FC0 # setg_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else55 # je %_main_else55 E9 %_main_loop_end54 # jmp %_main_loop_end54 ## M1.c 172 :_main_else55 #:_main_else55 # no else 50 # push_eax # i (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_loop54 # jmp %_main_loop54 :_main_loop_end54 #:_main_loop_end54 50 # push_eax # ch (local) 8D85 50000000 # lea_eax,[ebp+DWORD] %80 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## M1.c 174 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; ## M1.c 175 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # '%s' B8 &string_19 # mov_eax, &string_19 50 # push_eax # __var_args (local) 8D85 54000000 # lea_eax,[ebp+DWORD] %84 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 50 # push_eax # find_define (function) B8 &f_find_define # mov_eax, &f_find_define 81C5 58000000 # add_ebp, %88 # () FFD0 # call_eax 81ED 58000000 # sub_ebp, %88 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # __var_args (local) 8D85 54000000 # lea_eax,[ebp+DWORD] %84 50 # push_eax # fprintf (function) B8 &f_fprintf # mov_eax, &f_fprintf 81C5 58000000 # add_ebp, %88 # () FFD0 # call_eax 81ED 58000000 # sub_ebp, %88 58 # pop_eax # ; ## M1.c 176 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # i (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; ## M1.c 177 50 # push_eax # s (local) 8D85 48000000 # lea_eax,[ebp+DWORD] %72 8B00 # mov_eax,[eax] # ? 50 # push_eax # ch (local) 8D85 50000000 # lea_eax,[ebp+DWORD] %80 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 5B # pop_ebx # =1 8803 # mov_[ebx],al 58 # pop_eax # ; :_main_else_end49 #:_main_else_end49 :_main_else_end46 #:_main_else_end46 :_main_else_end35 #:_main_else_end35 :_main_else_end30 #:_main_else_end30 E9 %_main_loop25 # jmp %_main_loop25 :_main_loop_end25 #:_main_loop_end25 ## M1.c 180 50 # push_eax # ' #' B8 &string_20 # mov_eax, &string_20 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputs (function) B8 &f_fputs # mov_eax, &f_fputs 81C5 4C000000 # add_ebp, %76 # () FFD0 # call_eax 81ED 4C000000 # sub_ebp, %76 58 # pop_eax # ; ## M1.c 181 50 # push_eax # s (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 50 # push_eax # line (static) B8 &static_0_line # mov_eax, &static_0_line 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; :_main_loop56 #:_main_loop56 50 # push_eax # s (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 5B # pop_ebx # != 39C3 # cmp_eax_ebx 0F95C0 # setne_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # ! 0F94C0 # sete_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else57 # je %_main_else57 E9 %_main_loop_end56 # jmp %_main_loop_end56 ## M1.c 182 :_main_else57 #:_main_else57 # no else 50 # push_eax # s (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 50 # push_eax # line (static) B8 &static_0_line # mov_eax, &static_0_line 50 # push_eax # 100 B8 64000000 # mov_eax, %100 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # > 39C3 # cmp_eax_ebx 0F97C0 # seta_al 0FB6C0 # movzx_eax,al 85C0 # test_eax,eax # if 58 # pop_eax 0F84 %_main_else58 # je %_main_else58 ## M1.c 183 ## M1.c 184 50 # push_eax # ' ...' B8 &string_21 # mov_eax, &string_21 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputs (function) B8 &f_fputs # mov_eax, &f_fputs 81C5 50000000 # add_ebp, %80 # () FFD0 # call_eax 81ED 50000000 # sub_ebp, %80 58 # pop_eax # ; ## M1.c 185 E9 %_main_loop_end56 # jmp %_main_loop_end56 E9 %_main_else_end58 # jmp %_main_else_end58 :_main_else58 #:_main_else58 ## M1.c 188 50 # push_eax # s (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 8B00 # mov_eax,[eax] # ? 8A00 # mov_al,[eax] # ?1 0FB6C0 # movzx_eax,al 0FBEC0 # movsx_eax,al # char 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputc (function) B8 &f_fputc # mov_eax, &f_fputc 81C5 50000000 # add_ebp, %80 # () FFD0 # call_eax 81ED 50000000 # sub_ebp, %80 58 # pop_eax # ; :_main_else_end58 #:_main_else_end58 50 # push_eax # s (local) 8D85 4C000000 # lea_eax,[ebp+DWORD] %76 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_loop56 # jmp %_main_loop56 :_main_loop_end56 #:_main_loop_end56 ## M1.c 189 50 # push_eax # 10 B8 0A000000 # mov_eax, %10 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # fputc (function) B8 &f_fputc # mov_eax, &f_fputc 81C5 4C000000 # add_ebp, %76 # () FFD0 # call_eax 81ED 4C000000 # sub_ebp, %76 58 # pop_eax # ; :_main_else_end11 #:_main_else_end11 E9 %_main_loop9 # jmp %_main_loop9 :_main_loop_end9 #:_main_loop_end9 ## M1.c 192 50 # push_eax # fout (local) 8D85 3C000000 # lea_eax,[ebp+DWORD] %60 8B00 # mov_eax,[eax] # ? 50 # push_eax # fclose (function) B8 &f_fclose # mov_eax, &f_fclose 81C5 48000000 # add_ebp, %72 # () FFD0 # call_eax 81ED 48000000 # sub_ebp, %72 58 # pop_eax # ; 50 # push_eax # i (local) 8D85 40000000 # lea_eax,[ebp+DWORD] %64 50 # push_eax # $ (dup) 8B00 # mov_eax,[eax] # ? 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # + 01D8 # add_eax,ebx 5B # pop_ebx # = 8903 # mov_[ebx],eax 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # - 29C3 # sub_ebx,eax 89D8 # mov_eax,ebx 58 # pop_eax # ; E9 %_main_loop6 # jmp %_main_loop6 :_main_loop_end6 #:_main_loop_end6 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :f___init_globals__ #:f___init_globals__ 58 # pop_eax 894500 # mov_[ebp],eax 58 # pop_eax 50 # push_eax # __sys_stdin (global) B8 &g___sys_stdin # mov_eax, &g___sys_stdin 50 # push_eax # $ (dup) 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # __sys_stdout (global) B8 &g___sys_stdout # mov_eax, &g___sys_stdout 50 # push_eax # $ (dup) 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # __sys_stderr (global) B8 &g___sys_stderr # mov_eax, &g___sys_stderr 50 # push_eax # $ (dup) 50 # push_eax # 2 B8 02000000 # mov_eax, %2 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # 4 B8 04000000 # mov_eax, %4 5B # pop_ebx # + 01D8 # add_eax,ebx 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # stdin (global) B8 &g_stdin # mov_eax, &g_stdin 50 # push_eax # __sys_stdin (global) B8 &g___sys_stdin # mov_eax, &g___sys_stdin 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # stdout (global) B8 &g_stdout # mov_eax, &g_stdout 50 # push_eax # __sys_stdout (global) B8 &g___sys_stdout # mov_eax, &g___sys_stdout 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # stderr (global) B8 &g_stderr # mov_eax, &g_stderr 50 # push_eax # __sys_stderr (global) B8 &g___sys_stderr # mov_eax, &g___sys_stderr 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # LINE_MACRO_OUTPUT_FORMAT_GCC (global) B8 &g_LINE_MACRO_OUTPUT_FORMAT_GCC # mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_GCC 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # LINE_MACRO_OUTPUT_FORMAT_NONE (global) B8 &g_LINE_MACRO_OUTPUT_FORMAT_NONE # mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_NONE 50 # push_eax # 1 B8 01000000 # mov_eax, %1 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # LINE_MACRO_OUTPUT_FORMAT_STD (global) B8 &g_LINE_MACRO_OUTPUT_FORMAT_STD # mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_STD 50 # push_eax # 2 B8 02000000 # mov_eax, %2 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # LINE_MACRO_OUTPUT_FORMAT_P10 (global) B8 &g_LINE_MACRO_OUTPUT_FORMAT_P10 # mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_P10 50 # push_eax # 11 B8 0B000000 # mov_eax, %11 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # _sys_env (global) B8 &g__sys_env # mov_eax, &g__sys_env 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # defines (global) B8 &g_defines # mov_eax, &g_defines 50 # push_eax # 0 B8 00000000 # mov_eax, %0 5B # pop_ebx # = 8903 # mov_[ebx],eax 58 # pop_eax # ; 50 # push_eax # 0 B8 00000000 # mov_eax, %0 8B5D00 # mov_ebx,[ebp] # return 53 # push_ebx C3 # ret # :ELF_data #:ELF_data # :SYS_MALLOC 00000000 #:SYS_MALLOC NULL :string_0 5F5F7379735F7072696E7466202500 #:string_0 "__sys_printf %" :string_1 2000 #:string_1 " " :string_2 0A 00 #:string_2 !10 !0 :string_3 4D 6F 64 65 20 25 73 20 73 68 6F 75 6C 64 20 62 65 #:string_3 !77 !111 !100 !101 !32 !37 !115 !32 !115 !104 !111 !117 !108 !100 !32 !98 !101 20 27 72 2F 77 28 62 29 28 2B 29 27 2C 20 27 77 27 2C 20 6F # !32 !39 !114 !47 !119 !40 !98 !41 !40 !43 !41 !39 !44 !32 !39 !119 !39 !44 !32 !111 72 20 27 77 62 27 0A 00 # !114 !32 !39 !119 !98 !39 !10 !0 :string_4 66 6F 70 65 6E 20 25 73 20 25 73 20 72 65 74 75 72 #:string_4 !102 !111 !112 !101 !110 !32 !37 !115 !32 !37 !115 !32 !114 !101 !116 !117 !114 6E 65 64 20 25 64 0A 00 # !110 !101 !100 !32 !37 !100 !10 !0 :string_5 54 4F 44 4F 20 74 69 6D 65 0A 00 #:string_5 !84 !79 !68 !79 !32 !116 !105 !109 !101 !10 !0 :string_6 54 4F 44 4F 20 6C 6F 63 61 6C 74 69 6D 65 0A 00 #:string_6 !84 !79 !68 !79 !32 !108 !111 !99 !97 !108 !116 !105 !109 !101 !10 !0 :string_7 54 4F 44 4F 20 73 65 74 6A 6D 70 0A 00 #:string_7 !84 !79 !68 !79 !32 !115 !101 !116 !106 !109 !112 !10 !0 :string_8 54 4F 44 4F 20 6C 6F 6E 67 6A 6D 70 0A 00 #:string_8 !84 !79 !68 !79 !32 !108 !111 !110 !103 !106 !109 !112 !10 !0 :string_9 73 73 63 61 6E 66 3A 20 66 6F 72 6D 61 74 20 25 25 #:string_9 !115 !115 !99 !97 !110 !102 !58 !32 !102 !111 !114 !109 !97 !116 !32 !37 !37 25 63 20 6E 6F 74 20 73 75 70 70 6F 72 74 65 64 0A 00 # !37 !99 !32 !110 !111 !116 !32 !115 !117 !112 !112 !111 !114 !116 !101 !100 !10 !0 :string_10 54 4F 44 4F 20 61 74 6F 69 0A 00 #:string_10 !84 !79 !68 !79 !32 !97 !116 !111 !105 !10 !0 :string_11 54 4F 44 4F 20 65 78 65 63 76 70 0A 00 #:string_11 !84 !79 !68 !79 !32 !101 !120 !101 !99 !118 !112 !10 !0 :string_12 2D6F00 #:string_12 "-o" :string_13 7700 #:string_13 "w" :string_14 4572726F723A2043616E6E6F74206F70656E2066696C65202725732720666F722077726974696E6700 #:string_14 "Error: Cannot open file '%s' for writing" :string_15 7200 #:string_15 "r" :string_16 43 61 6E 6E 6F 74 20 6F 70 65 6E 20 25 73 20 66 6F #:string_16 !67 !97 !110 !110 !111 !116 !32 !111 !112 !101 !110 !32 !37 !115 !32 !102 !111 72 20 72 65 61 64 69 6E 67 0A 00 # !114 !32 !114 !101 !97 !100 !105 !110 !103 !10 !0 :string_17 444546494E452000 #:string_17 "DEFINE " :string_18 30302000 #:string_18 "00 " :string_19 257300 #:string_19 "%s" :string_20 202300 #:string_20 " #" :string_21 202E2E2E00 #:string_21 " ..." :g___sys_stdin #:g___sys_stdin 00000000 00000000 # NULL NULL :g___sys_stdout #:g___sys_stdout 00000000 00000000 # NULL NULL :g___sys_stderr #:g___sys_stderr 00000000 00000000 # NULL NULL :g_stdin #:g_stdin 00000000 # NULL :g_stdout #:g_stdout 00000000 # NULL :g_stderr #:g_stderr 00000000 # NULL :g_errno #:g_errno 00000000 # NULL :g_LINE_MACRO_OUTPUT_FORMAT_GCC #:g_LINE_MACRO_OUTPUT_FORMAT_GCC 00000000 # NULL :g_LINE_MACRO_OUTPUT_FORMAT_NONE #:g_LINE_MACRO_OUTPUT_FORMAT_NONE 00000000 # NULL :g_LINE_MACRO_OUTPUT_FORMAT_STD #:g_LINE_MACRO_OUTPUT_FORMAT_STD 00000000 # NULL :g_LINE_MACRO_OUTPUT_FORMAT_P10 #:g_LINE_MACRO_OUTPUT_FORMAT_P10 00000000 # NULL :g__sys_env #:g__sys_env 00000000 # NULL :g_defines #:g_defines 00000000 # NULL :static_0_line #:static_0_line 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 # NULL NULL NULL NULL NULL NULL NULL NULL # :ELF_end #:ELF_end
# Generated sections :ELF_shstr 00 # NULL :ELF_shstr__text ".text" :ELF_shstr__shstr ".shstrtab" :ELF_shstr__sym ".symtab" :ELF_shstr__str ".strtab" :ELF_section_headers 00000000 #sh_name 00000000 #sh_type 00000000 #sh_flags 00000000 #sh_addr 00000000 #sh_offset 00000000 #sh_size 00000000 #sh_link 00000000 #sh_info 01000000 #sh_addralign 00000000 #sh_entsize :ELF_section_header_text %ELF_shstr__text>ELF_shstr #sh_name 01000000 #sh_type 06000000 #sh_flags &ELF_text #sh_addr %ELF_text>ELF_base #sh_offset %ELF_data>ELF_text #sh_size 00000000 #sh_link 00000000 #sh_info 01000000 #sh_addralign 00000000 #sh_entsize :ELF_section_header_shstr %ELF_shstr__shstr>ELF_shstr #sh_name 03000000 #sh_type 00000000 #sh_flags &ELF_shstr #sh_addr %ELF_shstr>ELF_base #sh_offset %ELF_section_headers>ELF_shstr #sh_size 00000000 #sh_link 00000000 #sh_info 01000000 #sh_addralign 00000000 #sh_entsize :ELF_section_header_str %ELF_shstr__str>ELF_shstr #sh_name 03000000 #sh_type 00000000 #sh_flags &ELF_str #sh_addr %ELF_str>ELF_base #sh_offset %ELF_sym>ELF_str #sh_size 00000000 #sh_link 00000000 #sh_info 01000000 #sh_addralign 00000000 #sh_entsize :ELF_section_header_sym %ELF_shstr__sym>ELF_shstr #sh_name 02000000 #sh_type 00000000 #sh_flags &ELF_sym #sh_addr %ELF_sym>ELF_base #sh_offset %ELF_end>ELF_sym #sh_size 03000000 #sh_link A0010000 #sh_info 01000000 #sh_addralign 10000000 #sh_entsize # Generated string table :ELF_str 00 # NULL string :ELF_str_ELF_text "ELF_text" # "ELF_text" :ELF_str__start "_start" # "_start" :ELF_str_f_sys_int80 "f_sys_int80" # "f_sys_int80" :ELF_str_f_sys_malloc "f_sys_malloc" # "f_sys_malloc" :ELF_str_SYS_MALLOC "SYS_MALLOC" # "SYS_MALLOC" :ELF_str_f_exit "f_exit" # "f_exit" :ELF_str_f_memcpy "f_memcpy" # "f_memcpy" :ELF_str__memcpy_loop1 "_memcpy_loop1" # "_memcpy_loop1" :ELF_str__memcpy_else2 "_memcpy_else2" # "_memcpy_else2" :ELF_str__memcpy_loop_end1 "_memcpy_loop_end1" # "_memcpy_loop_end1" :ELF_str_f_memmove "f_memmove" # "f_memmove" :ELF_str__memmove_loop2 "_memmove_loop2" # "_memmove_loop2" :ELF_str__memmove_else3 "_memmove_else3" # "_memmove_else3" :ELF_str__memmove_loop_end2 "_memmove_loop_end2" # "_memmove_loop_end2" :ELF_str__memmove_else1 "_memmove_else1" # "_memmove_else1" :ELF_str__memmove_loop5 "_memmove_loop5" # "_memmove_loop5" :ELF_str__memmove_else6 "_memmove_else6" # "_memmove_else6" :ELF_str__memmove_loop_end5 "_memmove_loop_end5" # "_memmove_loop_end5" :ELF_str__memmove_else4 "_memmove_else4" # "_memmove_else4" :ELF_str__memmove_else_end1 "_memmove_else_end1" # "_memmove_else_end1" :ELF_str_f_memset "f_memset" # "f_memset" :ELF_str__memset_loop1 "_memset_loop1" # "_memset_loop1" :ELF_str__memset_else2 "_memset_else2" # "_memset_else2" :ELF_str__memset_loop_end1 "_memset_loop_end1" # "_memset_loop_end1" :ELF_str_f_memcmp "f_memcmp" # "f_memcmp" :ELF_str__memcmp_loop1 "_memcmp_loop1" # "_memcmp_loop1" :ELF_str__memcmp_else2 "_memcmp_else2" # "_memcmp_else2" :ELF_str__memcmp_else3 "_memcmp_else3" # "_memcmp_else3" :ELF_str__memcmp_loop_end1 "_memcmp_loop_end1" # "_memcmp_loop_end1" :ELF_str_f_strlen "f_strlen" # "f_strlen" :ELF_str__strlen_loop1 "_strlen_loop1" # "_strlen_loop1" :ELF_str__strlen_else2 "_strlen_else2" # "_strlen_else2" :ELF_str__strlen_loop_end1 "_strlen_loop_end1" # "_strlen_loop_end1" :ELF_str_f_strcpy "f_strcpy" # "f_strcpy" :ELF_str__strcpy_loop1 "_strcpy_loop1" # "_strcpy_loop1" :ELF_str__strcpy_else2 "_strcpy_else2" # "_strcpy_else2" :ELF_str__strcpy_loop_end1 "_strcpy_loop_end1" # "_strcpy_loop_end1" :ELF_str_f_strncpy "f_strncpy" # "f_strncpy" :ELF_str__strncpy_loop1 "_strncpy_loop1" # "_strncpy_loop1" :ELF_str__strncpy_else2 "_strncpy_else2" # "_strncpy_else2" :ELF_str__strncpy_else3 "_strncpy_else3" # "_strncpy_else3" :ELF_str__strncpy_loop_end1 "_strncpy_loop_end1" # "_strncpy_loop_end1" :ELF_str_f_strcat "f_strcat" # "f_strcat" :ELF_str_f_strchr "f_strchr" # "f_strchr" :ELF_str__strchr_loop1 "_strchr_loop1" # "_strchr_loop1" :ELF_str__strchr_else2 "_strchr_else2" # "_strchr_else2" :ELF_str__strchr_else3 "_strchr_else3" # "_strchr_else3" :ELF_str__strchr_loop_end1 "_strchr_loop_end1" # "_strchr_loop_end1" :ELF_str__strchr_else4 "_strchr_else4" # "_strchr_else4" :ELF_str__strchr_else_end4 "_strchr_else_end4" # "_strchr_else_end4" :ELF_str_f_strrchr "f_strrchr" # "f_strrchr" :ELF_str__strrchr_loop1 "_strrchr_loop1" # "_strrchr_loop1" :ELF_str__strrchr_else2 "_strrchr_else2" # "_strrchr_else2" :ELF_str__strrchr_else3 "_strrchr_else3" # "_strrchr_else3" :ELF_str__strrchr_loop_end1 "_strrchr_loop_end1" # "_strrchr_loop_end1" :ELF_str_f_strcmp "f_strcmp" # "f_strcmp" :ELF_str__strcmp_loop1 "_strcmp_loop1" # "_strcmp_loop1" :ELF_str__strcmp_or_end2 "_strcmp_or_end2" # "_strcmp_or_end2" :ELF_str__strcmp_else3 "_strcmp_else3" # "_strcmp_else3" :ELF_str__strcmp_loop_end1 "_strcmp_loop_end1" # "_strcmp_loop_end1" :ELF_str_f_strncmp "f_strncmp" # "f_strncmp" :ELF_str__strncmp_loop1 "_strncmp_loop1" # "_strncmp_loop1" :ELF_str__strncmp_else2 "_strncmp_else2" # "_strncmp_else2" :ELF_str__strncmp_or_end3 "_strncmp_or_end3" # "_strncmp_or_end3" :ELF_str__strncmp_else4 "_strncmp_else4" # "_strncmp_else4" :ELF_str__strncmp_loop_end1 "_strncmp_loop_end1" # "_strncmp_loop_end1" :ELF_str_f_strstr "f_strstr" # "f_strstr" :ELF_str__strstr_loop1 "_strstr_loop1" # "_strstr_loop1" :ELF_str__strstr_else2 "_strstr_else2" # "_strstr_else2" :ELF_str__strstr_else3 "_strstr_else3" # "_strstr_else3" :ELF_str__strstr_loop_end1 "_strstr_loop_end1" # "_strstr_loop_end1" :ELF_str_f_strtoul "f_strtoul" # "f_strtoul" :ELF_str__strtoul_or_end3 "_strtoul_or_end3" # "_strtoul_or_end3" :ELF_str__strtoul_else4 "_strtoul_else4" # "_strtoul_else4" :ELF_str__strtoul_else2 "_strtoul_else2" # "_strtoul_else2" :ELF_str__strtoul_else1 "_strtoul_else1" # "_strtoul_else1" :ELF_str__strtoul_else5 "_strtoul_else5" # "_strtoul_else5" :ELF_str__strtoul_else_end5 "_strtoul_else_end5" # "_strtoul_else_end5" :ELF_str__strtoul_loop6 "_strtoul_loop6" # "_strtoul_loop6" :ELF_str__strtoul_and_end7 "_strtoul_and_end7" # "_strtoul_and_end7" :ELF_str__strtoul_else8 "_strtoul_else8" # "_strtoul_else8" :ELF_str__strtoul_and_end9 "_strtoul_and_end9" # "_strtoul_and_end9" :ELF_str__strtoul_else10 "_strtoul_else10" # "_strtoul_else10" :ELF_str__strtoul_and_end11 "_strtoul_and_end11" # "_strtoul_and_end11" :ELF_str__strtoul_else12 "_strtoul_else12" # "_strtoul_else12" :ELF_str__strtoul_else_end12 "_strtoul_else_end12" # "_strtoul_else_end12" :ELF_str__strtoul_else_end10 "_strtoul_else_end10" # "_strtoul_else_end10" :ELF_str__strtoul_else_end8 "_strtoul_else_end8" # "_strtoul_else_end8" :ELF_str__strtoul_loop_end6 "_strtoul_loop_end6" # "_strtoul_loop_end6" :ELF_str__strtoul_else13 "_strtoul_else13" # "_strtoul_else13" :ELF_str_f_strtol "f_strtol" # "f_strtol" :ELF_str__strtol_else1 "_strtol_else1" # "_strtol_else1" :ELF_str_f_strtoll "f_strtoll" # "f_strtoll" :ELF_str_f_strtoull "f_strtoull" # "f_strtoull" :ELF_str_f_strtof "f_strtof" # "f_strtof" :ELF_str_f_malloc "f_malloc" # "f_malloc" :ELF_str_f_realloc "f_realloc" # "f_realloc" :ELF_str__realloc_loop2 "_realloc_loop2" # "_realloc_loop2" :ELF_str__realloc_else3 "_realloc_else3" # "_realloc_else3" :ELF_str__realloc_loop_end2 "_realloc_loop_end2" # "_realloc_loop_end2" :ELF_str__realloc_else1 "_realloc_else1" # "_realloc_else1" :ELF_str_f_calloc "f_calloc" # "f_calloc" :ELF_str__calloc_loop1 "_calloc_loop1" # "_calloc_loop1" :ELF_str__calloc_else2 "_calloc_else2" # "_calloc_else2" :ELF_str__calloc_loop_end1 "_calloc_loop_end1" # "_calloc_loop_end1" :ELF_str_f_free "f_free" # "f_free" :ELF_str_f_fwrite "f_fwrite" # "f_fwrite" :ELF_str_f_fputc "f_fputc" # "f_fputc" :ELF_str_f_fputs "f_fputs" # "f_fputs" :ELF_str_f___sys_printf "f___sys_printf" # "f___sys_printf" :ELF_str____sys_printf_loop1 "___sys_printf_loop1" # "___sys_printf_loop1" :ELF_str____sys_printf_else2 "___sys_printf_else2" # "___sys_printf_else2" :ELF_str____sys_printf_else4 "___sys_printf_else4" # "___sys_printf_else4" :ELF_str____sys_printf_else5 "___sys_printf_else5" # "___sys_printf_else5" :ELF_str____sys_printf_else_end4 "___sys_printf_else_end4" # "___sys_printf_else_end4" :ELF_str____sys_printf_else6 "___sys_printf_else6" # "___sys_printf_else6" :ELF_str____sys_printf_else3 "___sys_printf_else3" # "___sys_printf_else3" :ELF_str____sys_printf_else8 "___sys_printf_else8" # "___sys_printf_else8" :ELF_str____sys_printf_else10 "___sys_printf_else10" # "___sys_printf_else10" :ELF_str____sys_printf_else11 "___sys_printf_else11" # "___sys_printf_else11" :ELF_str____sys_printf_loop12 "___sys_printf_loop12" # "___sys_printf_loop12" :ELF_str____sys_printf_and_end13 "___sys_printf_and_end13" # "___sys_printf_and_end13" :ELF_str____sys_printf_else14 "___sys_printf_else14" # "___sys_printf_else14" :ELF_str____sys_printf_loop_end12 "___sys_printf_loop_end12" # "___sys_printf_loop_end12" :ELF_str____sys_printf_else15 "___sys_printf_else15" # "___sys_printf_else15" :ELF_str____sys_printf_else17 "___sys_printf_else17" # "___sys_printf_else17" :ELF_str____sys_printf_else18 "___sys_printf_else18" # "___sys_printf_else18" :ELF_str____sys_printf_loop19 "___sys_printf_loop19" # "___sys_printf_loop19" :ELF_str____sys_printf_else20 "___sys_printf_else20" # "___sys_printf_else20" :ELF_str____sys_printf_loop_end19 "___sys_printf_loop_end19" # "___sys_printf_loop_end19" :ELF_str____sys_printf_else21 "___sys_printf_else21" # "___sys_printf_else21" :ELF_str____sys_printf_else_end17 "___sys_printf_else_end17" # "___sys_printf_else_end17" :ELF_str____sys_printf_loop25 "___sys_printf_loop25" # "___sys_printf_loop25" :ELF_str____sys_printf_else26 "___sys_printf_else26" # "___sys_printf_else26" :ELF_str____sys_printf_else27 "___sys_printf_else27" # "___sys_printf_else27" :ELF_str____sys_printf_else_end27 "___sys_printf_else_end27" # "___sys_printf_else_end27" :ELF_str____sys_printf_loop_end25 "___sys_printf_loop_end25" # "___sys_printf_loop_end25" :ELF_str____sys_printf_else24 "___sys_printf_else24" # "___sys_printf_else24" :ELF_str____sys_printf_loop28 "___sys_printf_loop28" # "___sys_printf_loop28" :ELF_str____sys_printf_else29 "___sys_printf_else29" # "___sys_printf_else29" :ELF_str____sys_printf_loop_end28 "___sys_printf_loop_end28" # "___sys_printf_loop_end28" :ELF_str____sys_printf_else_end24 "___sys_printf_else_end24" # "___sys_printf_else_end24" :ELF_str____sys_printf_else23 "___sys_printf_else23" # "___sys_printf_else23" :ELF_str____sys_printf_else22 "___sys_printf_else22" # "___sys_printf_else22" :ELF_str____sys_printf_else16 "___sys_printf_else16" # "___sys_printf_else16" :ELF_str____sys_printf_else31 "___sys_printf_else31" # "___sys_printf_else31" :ELF_str____sys_printf_loop32 "___sys_printf_loop32" # "___sys_printf_loop32" :ELF_str____sys_printf_else33 "___sys_printf_else33" # "___sys_printf_else33" :ELF_str____sys_printf_loop_end32 "___sys_printf_loop_end32" # "___sys_printf_loop_end32" :ELF_str____sys_printf_else_end31 "___sys_printf_else_end31" # "___sys_printf_else_end31" :ELF_str____sys_printf_else30 "___sys_printf_else30" # "___sys_printf_else30" :ELF_str____sys_printf_or_end34 "___sys_printf_or_end34" # "___sys_printf_or_end34" :ELF_str____sys_printf_else36 "___sys_printf_else36" # "___sys_printf_else36" :ELF_str____sys_printf_loop37 "___sys_printf_loop37" # "___sys_printf_loop37" :ELF_str____sys_printf_else38 "___sys_printf_else38" # "___sys_printf_else38" :ELF_str____sys_printf_else39 "___sys_printf_else39" # "___sys_printf_else39" :ELF_str____sys_printf_else_end39 "___sys_printf_else_end39" # "___sys_printf_else_end39" :ELF_str____sys_printf_loop_end37 "___sys_printf_loop_end37" # "___sys_printf_loop_end37" :ELF_str____sys_printf_else_end36 "___sys_printf_else_end36" # "___sys_printf_else_end36" :ELF_str____sys_printf_else35 "___sys_printf_else35" # "___sys_printf_else35" :ELF_str____sys_printf_else40 "___sys_printf_else40" # "___sys_printf_else40" :ELF_str____sys_printf_else_end40 "___sys_printf_else_end40" # "___sys_printf_else_end40" :ELF_str____sys_printf_else_end35 "___sys_printf_else_end35" # "___sys_printf_else_end35" :ELF_str____sys_printf_else_end30 "___sys_printf_else_end30" # "___sys_printf_else_end30" :ELF_str____sys_printf_else_end16 "___sys_printf_else_end16" # "___sys_printf_else_end16" :ELF_str____sys_printf_else_end15 "___sys_printf_else_end15" # "___sys_printf_else_end15" :ELF_str____sys_printf_else_end10 "___sys_printf_else_end10" # "___sys_printf_else_end10" :ELF_str____sys_printf_else9 "___sys_printf_else9" # "___sys_printf_else9" :ELF_str____sys_printf_else_end9 "___sys_printf_else_end9" # "___sys_printf_else_end9" :ELF_str____sys_printf_else7 "___sys_printf_else7" # "___sys_printf_else7" :ELF_str____sys_printf_loop_end1 "___sys_printf_loop_end1" # "___sys_printf_loop_end1" :ELF_str____sys_printf_and_end41 "___sys_printf_and_end41" # "___sys_printf_and_end41" :ELF_str____sys_printf_else42 "___sys_printf_else42" # "___sys_printf_else42" :ELF_str_f_va_end "f_va_end" # "f_va_end" :ELF_str_f_fprintf "f_fprintf" # "f_fprintf" :ELF_str_f_printf "f_printf" # "f_printf" :ELF_str_f_sprintf "f_sprintf" # "f_sprintf" :ELF_str_f_snprintf "f_snprintf" # "f_snprintf" :ELF_str_f_vsnprintf "f_vsnprintf" # "f_vsnprintf" :ELF_str_f_open "f_open" # "f_open" :ELF_str__open_else1 "_open_else1" # "_open_else1" :ELF_str_f_close "f_close" # "f_close" :ELF_str_f_read "f_read" # "f_read" :ELF_str_f_lseek "f_lseek" # "f_lseek" :ELF_str_f_fopen "f_fopen" # "f_fopen" :ELF_str__fopen_or_end1 "_fopen_or_end1" # "_fopen_or_end1" :ELF_str__fopen_else2 "_fopen_else2" # "_fopen_else2" :ELF_str__fopen_else3 "_fopen_else3" # "_fopen_else3" :ELF_str__fopen_else4 "_fopen_else4" # "_fopen_else4" :ELF_str__fopen_else5 "_fopen_else5" # "_fopen_else5" :ELF_str__fopen_else7 "_fopen_else7" # "_fopen_else7" :ELF_str__fopen_else_end7 "_fopen_else_end7" # "_fopen_else_end7" :ELF_str__fopen_else6 "_fopen_else6" # "_fopen_else6" :ELF_str__fopen_else8 "_fopen_else8" # "_fopen_else8" :ELF_str__fopen_else_end8 "_fopen_else_end8" # "_fopen_else_end8" :ELF_str__fopen_else_end6 "_fopen_else_end6" # "_fopen_else_end6" :ELF_str__fopen_else9 "_fopen_else9" # "_fopen_else9" :ELF_str_f_fdopen "f_fdopen" # "f_fdopen" :ELF_str_f_fclose "f_fclose" # "f_fclose" :ELF_str_f_fflush "f_fflush" # "f_fflush" :ELF_str_f_fseek "f_fseek" # "f_fseek" :ELF_str_f_ftell "f_ftell" # "f_ftell" :ELF_str_f_fread "f_fread" # "f_fread" :ELF_str__fread_loop1 "_fread_loop1" # "_fread_loop1" :ELF_str__fread_else2 "_fread_else2" # "_fread_else2" :ELF_str__fread_else3 "_fread_else3" # "_fread_else3" :ELF_str__fread_loop_end1 "_fread_loop_end1" # "_fread_loop_end1" :ELF_str_f_lseek "f_lseek" # "f_lseek" :ELF_str_f_feof "f_feof" # "f_feof" :ELF_str_f_fgetc "f_fgetc" # "f_fgetc" :ELF_str__fgetc_else1 "_fgetc_else1" # "_fgetc_else1" :ELF_str__fgetc_else2 "_fgetc_else2" # "_fgetc_else2" :ELF_str_f_ldexp "f_ldexp" # "f_ldexp" :ELF_str__ldexp_loop1 "_ldexp_loop1" # "_ldexp_loop1" :ELF_str__ldexp_else2 "_ldexp_else2" # "_ldexp_else2" :ELF_str__ldexp_loop_end1 "_ldexp_loop_end1" # "_ldexp_loop_end1" :ELF_str_f_time "f_time" # "f_time" :ELF_str_f_localtime "f_localtime" # "f_localtime" :ELF_str_f_gettimeofday "f_gettimeofday" # "f_gettimeofday" :ELF_str_f_write "f_write" # "f_write" :ELF_str_f_fileno "f_fileno" # "f_fileno" :ELF_str_f_getcwd "f_getcwd" # "f_getcwd" :ELF_str_f_getenv "f_getenv" # "f_getenv" :ELF_str__getenv_loop1 "_getenv_loop1" # "_getenv_loop1" :ELF_str__getenv_else2 "_getenv_else2" # "_getenv_else2" :ELF_str__getenv_and_end3 "_getenv_and_end3" # "_getenv_and_end3" :ELF_str__getenv_else4 "_getenv_else4" # "_getenv_else4" :ELF_str__getenv_loop_end1 "_getenv_loop_end1" # "_getenv_loop_end1" :ELF_str_f_qsort "f_qsort" # "f_qsort" :ELF_str__qsort_loop1 "_qsort_loop1" # "_qsort_loop1" :ELF_str__qsort_else2 "_qsort_else2" # "_qsort_else2" :ELF_str__qsort_loop3 "_qsort_loop3" # "_qsort_loop3" :ELF_str__qsort_else4 "_qsort_else4" # "_qsort_else4" :ELF_str__qsort_loop6 "_qsort_loop6" # "_qsort_loop6" :ELF_str__qsort_else7 "_qsort_else7" # "_qsort_else7" :ELF_str__qsort_else8 "_qsort_else8" # "_qsort_else8" :ELF_str__qsort_else_end8 "_qsort_else_end8" # "_qsort_else_end8" :ELF_str__qsort_loop_end6 "_qsort_loop_end6" # "_qsort_loop_end6" :ELF_str__qsort_else5 "_qsort_else5" # "_qsort_else5" :ELF_str__qsort_loop_end3 "_qsort_loop_end3" # "_qsort_loop_end3" :ELF_str__qsort_loop_end1 "_qsort_loop_end1" # "_qsort_loop_end1" :ELF_str_f_time "f_time" # "f_time" :ELF_str_f_setjmp "f_setjmp" # "f_setjmp" :ELF_str_f_longjmp "f_longjmp" # "f_longjmp" :ELF_str_f_unlink "f_unlink" # "f_unlink" :ELF_str_f_sscanf "f_sscanf" # "f_sscanf" :ELF_str__sscanf_loop1 "_sscanf_loop1" # "_sscanf_loop1" :ELF_str__sscanf_else2 "_sscanf_else2" # "_sscanf_else2" :ELF_str__sscanf_else3 "_sscanf_else3" # "_sscanf_else3" :ELF_str__sscanf_loop6 "_sscanf_loop6" # "_sscanf_loop6" :ELF_str__sscanf_and_end7 "_sscanf_and_end7" # "_sscanf_and_end7" :ELF_str__sscanf_else8 "_sscanf_else8" # "_sscanf_else8" :ELF_str__sscanf_loop_end6 "_sscanf_loop_end6" # "_sscanf_loop_end6" :ELF_str__sscanf_else5 "_sscanf_else5" # "_sscanf_else5" :ELF_str__sscanf_else_end5 "_sscanf_else_end5" # "_sscanf_else_end5" :ELF_str__sscanf_else4 "_sscanf_else4" # "_sscanf_else4" :ELF_str__sscanf_else9 "_sscanf_else9" # "_sscanf_else9" :ELF_str__sscanf_else_end4 "_sscanf_else_end4" # "_sscanf_else_end4" :ELF_str__sscanf_else_end3 "_sscanf_else_end3" # "_sscanf_else_end3" :ELF_str__sscanf_loop_end1 "_sscanf_loop_end1" # "_sscanf_loop_end1" :ELF_str_f_atoi "f_atoi" # "f_atoi" :ELF_str_f_remove "f_remove" # "f_remove" :ELF_str_f_execvp "f_execvp" # "f_execvp" :ELF_str_f_mkdir "f_mkdir" # "f_mkdir" :ELF_str_f_chdir "f_chdir" # "f_chdir" :ELF_str_f_access "f_access" # "f_access" :ELF_str_f_chmod "f_chmod" # "f_chmod" :ELF_str_f_symlink "f_symlink" # "f_symlink" :ELF_str_f_uname "f_uname" # "f_uname" :ELF_str_f_execve "f_execve" # "f_execve" :ELF_str_f_fgets "f_fgets" # "f_fgets" :ELF_str__fgets_else1 "_fgets_else1" # "_fgets_else1" :ELF_str__fgets_loop2 "_fgets_loop2" # "_fgets_loop2" :ELF_str__fgets_else3 "_fgets_else3" # "_fgets_else3" :ELF_str__fgets_else4 "_fgets_else4" # "_fgets_else4" :ELF_str__fgets_else5 "_fgets_else5" # "_fgets_else5" :ELF_str__fgets_loop_end2 "_fgets_loop_end2" # "_fgets_loop_end2" :ELF_str_f_fgets "f_fgets" # "f_fgets" :ELF_str__fgets_loop1 "_fgets_loop1" # "_fgets_loop1" :ELF_str__fgets_else2 "_fgets_else2" # "_fgets_else2" :ELF_str__fgets_else4 "_fgets_else4" # "_fgets_else4" :ELF_str__fgets_else3 "_fgets_else3" # "_fgets_else3" :ELF_str__fgets_else5 "_fgets_else5" # "_fgets_else5" :ELF_str__fgets_loop_end1 "_fgets_loop_end1" # "_fgets_loop_end1" :ELF_str_f_add_define "f_add_define" # "f_add_define" :ELF_str_f_find_define "f_find_define" # "f_find_define" :ELF_str__find_define_loop1 "_find_define_loop1" # "_find_define_loop1" :ELF_str__find_define_else2 "_find_define_else2" # "_find_define_else2" :ELF_str__find_define_else3 "_find_define_else3" # "_find_define_else3" :ELF_str__find_define_loop_end1 "_find_define_loop_end1" # "_find_define_loop_end1" :ELF_str_f_output_hex "f_output_hex" # "f_output_hex" :ELF_str__output_hex_else1 "_output_hex_else1" # "_output_hex_else1" :ELF_str__output_hex_else_end1 "_output_hex_else_end1" # "_output_hex_else_end1" :ELF_str_f_main "f_main" # "f_main" :ELF_str__main_loop1 "_main_loop1" # "_main_loop1" :ELF_str__main_else2 "_main_else2" # "_main_else2" :ELF_str__main_else3 "_main_else3" # "_main_else3" :ELF_str__main_else_end3 "_main_else_end3" # "_main_else_end3" :ELF_str__main_loop_end1 "_main_loop_end1" # "_main_loop_end1" :ELF_str__main_else5 "_main_else5" # "_main_else5" :ELF_str__main_else4 "_main_else4" # "_main_else4" :ELF_str__main_loop6 "_main_loop6" # "_main_loop6" :ELF_str__main_else7 "_main_else7" # "_main_else7" :ELF_str__main_else8 "_main_else8" # "_main_else8" :ELF_str__main_loop9 "_main_loop9" # "_main_loop9" :ELF_str__main_else10 "_main_else10" # "_main_else10" :ELF_str__main_loop12 "_main_loop12" # "_main_loop12" :ELF_str__main_else13 "_main_else13" # "_main_else13" :ELF_str__main_loop_end12 "_main_loop_end12" # "_main_loop_end12" :ELF_str__main_loop14 "_main_loop14" # "_main_loop14" :ELF_str__main_else15 "_main_else15" # "_main_else15" :ELF_str__main_loop_end14 "_main_loop_end14" # "_main_loop_end14" :ELF_str__main_else16 "_main_else16" # "_main_else16" :ELF_str__main_loop17 "_main_loop17" # "_main_loop17" :ELF_str__main_else18 "_main_else18" # "_main_else18" :ELF_str__main_loop_end17 "_main_loop_end17" # "_main_loop_end17" :ELF_str__main_loop19 "_main_loop19" # "_main_loop19" :ELF_str__main_else20 "_main_else20" # "_main_else20" :ELF_str__main_loop_end19 "_main_loop_end19" # "_main_loop_end19" :ELF_str__main_else21 "_main_else21" # "_main_else21" :ELF_str__main_else11 "_main_else11" # "_main_else11" :ELF_str__main_loop22 "_main_loop22" # "_main_loop22" :ELF_str__main_or_end23 "_main_or_end23" # "_main_or_end23" :ELF_str__main_else24 "_main_else24" # "_main_else24" :ELF_str__main_loop_end22 "_main_loop_end22" # "_main_loop_end22" :ELF_str__main_loop25 "_main_loop25" # "_main_loop25" :ELF_str__main_and_end26 "_main_and_end26" # "_main_and_end26" :ELF_str__main_and_end27 "_main_and_end27" # "_main_and_end27" :ELF_str__main_and_end28 "_main_and_end28" # "_main_and_end28" :ELF_str__main_else29 "_main_else29" # "_main_else29" :ELF_str__main_else30 "_main_else30" # "_main_else30" :ELF_str__main_or_end31 "_main_or_end31" # "_main_or_end31" :ELF_str__main_and_end33 "_main_and_end33" # "_main_and_end33" :ELF_str__main_or_end34 "_main_or_end34" # "_main_or_end34" :ELF_str__main_and_end32 "_main_and_end32" # "_main_and_end32" :ELF_str__main_else36 "_main_else36" # "_main_else36" :ELF_str__main_else_end36 "_main_else_end36" # "_main_else_end36" :ELF_str__main_else37 "_main_else37" # "_main_else37" :ELF_str__main_loop38 "_main_loop38" # "_main_loop38" :ELF_str__main_and_end39 "_main_and_end39" # "_main_and_end39" :ELF_str__main_else40 "_main_else40" # "_main_else40" :ELF_str__main_loop_end38 "_main_loop_end38" # "_main_loop_end38" :ELF_str__main_loop41 "_main_loop41" # "_main_loop41" :ELF_str__main_else42 "_main_else42" # "_main_else42" :ELF_str__main_loop_end41 "_main_loop_end41" # "_main_loop_end41" :ELF_str__main_else35 "_main_else35" # "_main_else35" :ELF_str__main_or_end43 "_main_or_end43" # "_main_or_end43" :ELF_str__main_or_end44 "_main_or_end44" # "_main_or_end44" :ELF_str__main_or_end45 "_main_or_end45" # "_main_or_end45" :ELF_str__main_loop47 "_main_loop47" # "_main_loop47" :ELF_str__main_else48 "_main_else48" # "_main_else48" :ELF_str__main_loop_end47 "_main_loop_end47" # "_main_loop_end47" :ELF_str__main_else46 "_main_else46" # "_main_else46" :ELF_str__main_loop50 "_main_loop50" # "_main_loop50" :ELF_str__main_and_end51 "_main_and_end51" # "_main_and_end51" :ELF_str__main_else52 "_main_else52" # "_main_else52" :ELF_str__main_loop_end50 "_main_loop_end50" # "_main_loop_end50" :ELF_str__main_else53 "_main_else53" # "_main_else53" :ELF_str__main_else49 "_main_else49" # "_main_else49" :ELF_str__main_loop54 "_main_loop54" # "_main_loop54" :ELF_str__main_else55 "_main_else55" # "_main_else55" :ELF_str__main_loop_end54 "_main_loop_end54" # "_main_loop_end54" :ELF_str__main_else_end49 "_main_else_end49" # "_main_else_end49" :ELF_str__main_else_end46 "_main_else_end46" # "_main_else_end46" :ELF_str__main_else_end35 "_main_else_end35" # "_main_else_end35" :ELF_str__main_else_end30 "_main_else_end30" # "_main_else_end30" :ELF_str__main_loop_end25 "_main_loop_end25" # "_main_loop_end25" :ELF_str__main_loop56 "_main_loop56" # "_main_loop56" :ELF_str__main_else57 "_main_else57" # "_main_else57" :ELF_str__main_else58 "_main_else58" # "_main_else58" :ELF_str__main_else_end58 "_main_else_end58" # "_main_else_end58" :ELF_str__main_loop_end56 "_main_loop_end56" # "_main_loop_end56" :ELF_str__main_else_end11 "_main_else_end11" # "_main_else_end11" :ELF_str__main_loop_end9 "_main_loop_end9" # "_main_loop_end9" :ELF_str__main_loop_end6 "_main_loop_end6" # "_main_loop_end6" :ELF_str_f___init_globals__ "f___init_globals__" # "f___init_globals__" :ELF_str_ELF_data "ELF_data" # "ELF_data" :ELF_str_SYS_MALLOC "SYS_MALLOC" # "SYS_MALLOC" :ELF_str_string_0 "string_0" # "string_0" :ELF_str_string_1 "string_1" # "string_1" :ELF_str_string_2 "string_2" # "string_2" :ELF_str_string_3 "string_3" # "string_3" :ELF_str_string_4 "string_4" # "string_4" :ELF_str_string_5 "string_5" # "string_5" :ELF_str_string_6 "string_6" # "string_6" :ELF_str_string_7 "string_7" # "string_7" :ELF_str_string_8 "string_8" # "string_8" :ELF_str_string_9 "string_9" # "string_9" :ELF_str_string_10 "string_10" # "string_10" :ELF_str_string_11 "string_11" # "string_11" :ELF_str_string_12 "string_12" # "string_12" :ELF_str_string_13 "string_13" # "string_13" :ELF_str_string_14 "string_14" # "string_14" :ELF_str_string_15 "string_15" # "string_15" :ELF_str_string_16 "string_16" # "string_16" :ELF_str_string_17 "string_17" # "string_17" :ELF_str_string_18 "string_18" # "string_18" :ELF_str_string_19 "string_19" # "string_19" :ELF_str_string_20 "string_20" # "string_20" :ELF_str_string_21 "string_21" # "string_21" :ELF_str_g___sys_stdin "g___sys_stdin" # "g___sys_stdin" :ELF_str_g___sys_stdout "g___sys_stdout" # "g___sys_stdout" :ELF_str_g___sys_stderr "g___sys_stderr" # "g___sys_stderr" :ELF_str_g_stdin "g_stdin" # "g_stdin" :ELF_str_g_stdout "g_stdout" # "g_stdout" :ELF_str_g_stderr "g_stderr" # "g_stderr" :ELF_str_g_errno "g_errno" # "g_errno" :ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_GCC "g_LINE_MACRO_OUTPUT_FORMAT_GCC" # "g_LINE_MACRO_OUTPUT_FORMAT_GCC" :ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_NONE "g_LINE_MACRO_OUTPUT_FORMAT_NONE" # "g_LINE_MACRO_OUTPUT_FORMAT_NONE" :ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_STD "g_LINE_MACRO_OUTPUT_FORMAT_STD" # "g_LINE_MACRO_OUTPUT_FORMAT_STD" :ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_P10 "g_LINE_MACRO_OUTPUT_FORMAT_P10" # "g_LINE_MACRO_OUTPUT_FORMAT_P10" :ELF_str_g__sys_env "g__sys_env" # "g__sys_env" :ELF_str_g_defines "g_defines" # "g_defines" :ELF_str_static_0_line "static_0_line" # "static_0_line" :ELF_str_ELF_end "ELF_end" # "ELF_end" # END Generated string table # Generated symbol table :ELF_sym # Required NULL symbol entry 00000000 # st_name 00000000 # st_value 00000000 # st_size 00 # st_info 00 # st_other 0100 # st_shndx %ELF_str_ELF_text>ELF_str # st_name &ELF_text #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__start>ELF_str # st_name &_start #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_sys_int80>ELF_str # st_name &f_sys_int80 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_sys_malloc>ELF_str # st_name &f_sys_malloc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_SYS_MALLOC>ELF_str # st_name &SYS_MALLOC #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_exit>ELF_str # st_name &f_exit #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_memcpy>ELF_str # st_name &f_memcpy #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__memcpy_loop1>ELF_str # st_name &_memcpy_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memcpy_else2>ELF_str # st_name &_memcpy_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memcpy_loop_end1>ELF_str # st_name &_memcpy_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_memmove>ELF_str # st_name &f_memmove #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__memmove_loop2>ELF_str # st_name &_memmove_loop2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_else3>ELF_str # st_name &_memmove_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_loop_end2>ELF_str # st_name &_memmove_loop_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_else1>ELF_str # st_name &_memmove_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_loop5>ELF_str # st_name &_memmove_loop5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_else6>ELF_str # st_name &_memmove_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_loop_end5>ELF_str # st_name &_memmove_loop_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_else4>ELF_str # st_name &_memmove_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memmove_else_end1>ELF_str # st_name &_memmove_else_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_memset>ELF_str # st_name &f_memset #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__memset_loop1>ELF_str # st_name &_memset_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memset_else2>ELF_str # st_name &_memset_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memset_loop_end1>ELF_str # st_name &_memset_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_memcmp>ELF_str # st_name &f_memcmp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__memcmp_loop1>ELF_str # st_name &_memcmp_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memcmp_else2>ELF_str # st_name &_memcmp_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memcmp_else3>ELF_str # st_name &_memcmp_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__memcmp_loop_end1>ELF_str # st_name &_memcmp_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strlen>ELF_str # st_name &f_strlen #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strlen_loop1>ELF_str # st_name &_strlen_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strlen_else2>ELF_str # st_name &_strlen_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strlen_loop_end1>ELF_str # st_name &_strlen_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strcpy>ELF_str # st_name &f_strcpy #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strcpy_loop1>ELF_str # st_name &_strcpy_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strcpy_else2>ELF_str # st_name &_strcpy_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strcpy_loop_end1>ELF_str # st_name &_strcpy_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strncpy>ELF_str # st_name &f_strncpy #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strncpy_loop1>ELF_str # st_name &_strncpy_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncpy_else2>ELF_str # st_name &_strncpy_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncpy_else3>ELF_str # st_name &_strncpy_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncpy_loop_end1>ELF_str # st_name &_strncpy_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strcat>ELF_str # st_name &f_strcat #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_strchr>ELF_str # st_name &f_strchr #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strchr_loop1>ELF_str # st_name &_strchr_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strchr_else2>ELF_str # st_name &_strchr_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strchr_else3>ELF_str # st_name &_strchr_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strchr_loop_end1>ELF_str # st_name &_strchr_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strchr_else4>ELF_str # st_name &_strchr_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strchr_else_end4>ELF_str # st_name &_strchr_else_end4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strrchr>ELF_str # st_name &f_strrchr #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strrchr_loop1>ELF_str # st_name &_strrchr_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strrchr_else2>ELF_str # st_name &_strrchr_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strrchr_else3>ELF_str # st_name &_strrchr_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strrchr_loop_end1>ELF_str # st_name &_strrchr_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strcmp>ELF_str # st_name &f_strcmp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strcmp_loop1>ELF_str # st_name &_strcmp_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strcmp_or_end2>ELF_str # st_name &_strcmp_or_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strcmp_else3>ELF_str # st_name &_strcmp_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strcmp_loop_end1>ELF_str # st_name &_strcmp_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strncmp>ELF_str # st_name &f_strncmp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strncmp_loop1>ELF_str # st_name &_strncmp_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncmp_else2>ELF_str # st_name &_strncmp_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncmp_or_end3>ELF_str # st_name &_strncmp_or_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncmp_else4>ELF_str # st_name &_strncmp_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strncmp_loop_end1>ELF_str # st_name &_strncmp_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strstr>ELF_str # st_name &f_strstr #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strstr_loop1>ELF_str # st_name &_strstr_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strstr_else2>ELF_str # st_name &_strstr_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strstr_else3>ELF_str # st_name &_strstr_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strstr_loop_end1>ELF_str # st_name &_strstr_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strtoul>ELF_str # st_name &f_strtoul #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strtoul_or_end3>ELF_str # st_name &_strtoul_or_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else4>ELF_str # st_name &_strtoul_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else2>ELF_str # st_name &_strtoul_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else1>ELF_str # st_name &_strtoul_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else5>ELF_str # st_name &_strtoul_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else_end5>ELF_str # st_name &_strtoul_else_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_loop6>ELF_str # st_name &_strtoul_loop6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_and_end7>ELF_str # st_name &_strtoul_and_end7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else8>ELF_str # st_name &_strtoul_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_and_end9>ELF_str # st_name &_strtoul_and_end9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else10>ELF_str # st_name &_strtoul_else10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_and_end11>ELF_str # st_name &_strtoul_and_end11 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else12>ELF_str # st_name &_strtoul_else12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else_end12>ELF_str # st_name &_strtoul_else_end12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else_end10>ELF_str # st_name &_strtoul_else_end10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else_end8>ELF_str # st_name &_strtoul_else_end8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_loop_end6>ELF_str # st_name &_strtoul_loop_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__strtoul_else13>ELF_str # st_name &_strtoul_else13 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strtol>ELF_str # st_name &f_strtol #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__strtol_else1>ELF_str # st_name &_strtol_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_strtoll>ELF_str # st_name &f_strtoll #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_strtoull>ELF_str # st_name &f_strtoull #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_strtof>ELF_str # st_name &f_strtof #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_malloc>ELF_str # st_name &f_malloc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_realloc>ELF_str # st_name &f_realloc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__realloc_loop2>ELF_str # st_name &_realloc_loop2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__realloc_else3>ELF_str # st_name &_realloc_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__realloc_loop_end2>ELF_str # st_name &_realloc_loop_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__realloc_else1>ELF_str # st_name &_realloc_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_calloc>ELF_str # st_name &f_calloc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__calloc_loop1>ELF_str # st_name &_calloc_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__calloc_else2>ELF_str # st_name &_calloc_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__calloc_loop_end1>ELF_str # st_name &_calloc_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_free>ELF_str # st_name &f_free #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fwrite>ELF_str # st_name &f_fwrite #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fputc>ELF_str # st_name &f_fputc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fputs>ELF_str # st_name &f_fputs #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f___sys_printf>ELF_str # st_name &f___sys_printf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str____sys_printf_loop1>ELF_str # st_name &___sys_printf_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else2>ELF_str # st_name &___sys_printf_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else4>ELF_str # st_name &___sys_printf_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else5>ELF_str # st_name &___sys_printf_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end4>ELF_str # st_name &___sys_printf_else_end4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else6>ELF_str # st_name &___sys_printf_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else3>ELF_str # st_name &___sys_printf_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else8>ELF_str # st_name &___sys_printf_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else10>ELF_str # st_name &___sys_printf_else10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else11>ELF_str # st_name &___sys_printf_else11 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop12>ELF_str # st_name &___sys_printf_loop12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_and_end13>ELF_str # st_name &___sys_printf_and_end13 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else14>ELF_str # st_name &___sys_printf_else14 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end12>ELF_str # st_name &___sys_printf_loop_end12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else15>ELF_str # st_name &___sys_printf_else15 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else17>ELF_str # st_name &___sys_printf_else17 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else18>ELF_str # st_name &___sys_printf_else18 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop19>ELF_str # st_name &___sys_printf_loop19 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else20>ELF_str # st_name &___sys_printf_else20 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end19>ELF_str # st_name &___sys_printf_loop_end19 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else21>ELF_str # st_name &___sys_printf_else21 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end17>ELF_str # st_name &___sys_printf_else_end17 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop25>ELF_str # st_name &___sys_printf_loop25 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else26>ELF_str # st_name &___sys_printf_else26 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else27>ELF_str # st_name &___sys_printf_else27 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end27>ELF_str # st_name &___sys_printf_else_end27 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end25>ELF_str # st_name &___sys_printf_loop_end25 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else24>ELF_str # st_name &___sys_printf_else24 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop28>ELF_str # st_name &___sys_printf_loop28 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else29>ELF_str # st_name &___sys_printf_else29 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end28>ELF_str # st_name &___sys_printf_loop_end28 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end24>ELF_str # st_name &___sys_printf_else_end24 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else23>ELF_str # st_name &___sys_printf_else23 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else22>ELF_str # st_name &___sys_printf_else22 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else16>ELF_str # st_name &___sys_printf_else16 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else31>ELF_str # st_name &___sys_printf_else31 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop32>ELF_str # st_name &___sys_printf_loop32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else33>ELF_str # st_name &___sys_printf_else33 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end32>ELF_str # st_name &___sys_printf_loop_end32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end31>ELF_str # st_name &___sys_printf_else_end31 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else30>ELF_str # st_name &___sys_printf_else30 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_or_end34>ELF_str # st_name &___sys_printf_or_end34 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else36>ELF_str # st_name &___sys_printf_else36 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop37>ELF_str # st_name &___sys_printf_loop37 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else38>ELF_str # st_name &___sys_printf_else38 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else39>ELF_str # st_name &___sys_printf_else39 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end39>ELF_str # st_name &___sys_printf_else_end39 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end37>ELF_str # st_name &___sys_printf_loop_end37 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end36>ELF_str # st_name &___sys_printf_else_end36 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else35>ELF_str # st_name &___sys_printf_else35 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else40>ELF_str # st_name &___sys_printf_else40 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end40>ELF_str # st_name &___sys_printf_else_end40 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end35>ELF_str # st_name &___sys_printf_else_end35 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end30>ELF_str # st_name &___sys_printf_else_end30 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end16>ELF_str # st_name &___sys_printf_else_end16 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end15>ELF_str # st_name &___sys_printf_else_end15 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end10>ELF_str # st_name &___sys_printf_else_end10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else9>ELF_str # st_name &___sys_printf_else9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else_end9>ELF_str # st_name &___sys_printf_else_end9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else7>ELF_str # st_name &___sys_printf_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_loop_end1>ELF_str # st_name &___sys_printf_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_and_end41>ELF_str # st_name &___sys_printf_and_end41 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str____sys_printf_else42>ELF_str # st_name &___sys_printf_else42 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_va_end>ELF_str # st_name &f_va_end #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fprintf>ELF_str # st_name &f_fprintf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_printf>ELF_str # st_name &f_printf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_sprintf>ELF_str # st_name &f_sprintf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_snprintf>ELF_str # st_name &f_snprintf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_vsnprintf>ELF_str # st_name &f_vsnprintf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_open>ELF_str # st_name &f_open #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__open_else1>ELF_str # st_name &_open_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_close>ELF_str # st_name &f_close #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_read>ELF_str # st_name &f_read #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_lseek>ELF_str # st_name &f_lseek #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fopen>ELF_str # st_name &f_fopen #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__fopen_or_end1>ELF_str # st_name &_fopen_or_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else2>ELF_str # st_name &_fopen_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else3>ELF_str # st_name &_fopen_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else4>ELF_str # st_name &_fopen_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else5>ELF_str # st_name &_fopen_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else7>ELF_str # st_name &_fopen_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else_end7>ELF_str # st_name &_fopen_else_end7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else6>ELF_str # st_name &_fopen_else6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else8>ELF_str # st_name &_fopen_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else_end8>ELF_str # st_name &_fopen_else_end8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else_end6>ELF_str # st_name &_fopen_else_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fopen_else9>ELF_str # st_name &_fopen_else9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_fdopen>ELF_str # st_name &f_fdopen #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fclose>ELF_str # st_name &f_fclose #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fflush>ELF_str # st_name &f_fflush #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fseek>ELF_str # st_name &f_fseek #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_ftell>ELF_str # st_name &f_ftell #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fread>ELF_str # st_name &f_fread #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__fread_loop1>ELF_str # st_name &_fread_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fread_else2>ELF_str # st_name &_fread_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fread_else3>ELF_str # st_name &_fread_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fread_loop_end1>ELF_str # st_name &_fread_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_lseek>ELF_str # st_name &f_lseek #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_feof>ELF_str # st_name &f_feof #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fgetc>ELF_str # st_name &f_fgetc #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__fgetc_else1>ELF_str # st_name &_fgetc_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgetc_else2>ELF_str # st_name &_fgetc_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_ldexp>ELF_str # st_name &f_ldexp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__ldexp_loop1>ELF_str # st_name &_ldexp_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__ldexp_else2>ELF_str # st_name &_ldexp_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__ldexp_loop_end1>ELF_str # st_name &_ldexp_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_time>ELF_str # st_name &f_time #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_localtime>ELF_str # st_name &f_localtime #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_gettimeofday>ELF_str # st_name &f_gettimeofday #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_write>ELF_str # st_name &f_write #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fileno>ELF_str # st_name &f_fileno #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_getcwd>ELF_str # st_name &f_getcwd #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_getenv>ELF_str # st_name &f_getenv #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__getenv_loop1>ELF_str # st_name &_getenv_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__getenv_else2>ELF_str # st_name &_getenv_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__getenv_and_end3>ELF_str # st_name &_getenv_and_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__getenv_else4>ELF_str # st_name &_getenv_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__getenv_loop_end1>ELF_str # st_name &_getenv_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_qsort>ELF_str # st_name &f_qsort #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__qsort_loop1>ELF_str # st_name &_qsort_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else2>ELF_str # st_name &_qsort_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_loop3>ELF_str # st_name &_qsort_loop3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else4>ELF_str # st_name &_qsort_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_loop6>ELF_str # st_name &_qsort_loop6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else7>ELF_str # st_name &_qsort_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else8>ELF_str # st_name &_qsort_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else_end8>ELF_str # st_name &_qsort_else_end8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_loop_end6>ELF_str # st_name &_qsort_loop_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_else5>ELF_str # st_name &_qsort_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_loop_end3>ELF_str # st_name &_qsort_loop_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__qsort_loop_end1>ELF_str # st_name &_qsort_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_time>ELF_str # st_name &f_time #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_setjmp>ELF_str # st_name &f_setjmp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_longjmp>ELF_str # st_name &f_longjmp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_unlink>ELF_str # st_name &f_unlink #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_sscanf>ELF_str # st_name &f_sscanf #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__sscanf_loop1>ELF_str # st_name &_sscanf_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else2>ELF_str # st_name &_sscanf_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else3>ELF_str # st_name &_sscanf_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_loop6>ELF_str # st_name &_sscanf_loop6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_and_end7>ELF_str # st_name &_sscanf_and_end7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else8>ELF_str # st_name &_sscanf_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_loop_end6>ELF_str # st_name &_sscanf_loop_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else5>ELF_str # st_name &_sscanf_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else_end5>ELF_str # st_name &_sscanf_else_end5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else4>ELF_str # st_name &_sscanf_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else9>ELF_str # st_name &_sscanf_else9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else_end4>ELF_str # st_name &_sscanf_else_end4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_else_end3>ELF_str # st_name &_sscanf_else_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__sscanf_loop_end1>ELF_str # st_name &_sscanf_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_atoi>ELF_str # st_name &f_atoi #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_remove>ELF_str # st_name &f_remove #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_execvp>ELF_str # st_name &f_execvp #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_mkdir>ELF_str # st_name &f_mkdir #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_chdir>ELF_str # st_name &f_chdir #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_access>ELF_str # st_name &f_access #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_chmod>ELF_str # st_name &f_chmod #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_symlink>ELF_str # st_name &f_symlink #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_uname>ELF_str # st_name &f_uname #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_execve>ELF_str # st_name &f_execve #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_fgets>ELF_str # st_name &f_fgets #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__fgets_else1>ELF_str # st_name &_fgets_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_loop2>ELF_str # st_name &_fgets_loop2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_else3>ELF_str # st_name &_fgets_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_else4>ELF_str # st_name &_fgets_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_else5>ELF_str # st_name &_fgets_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_loop_end2>ELF_str # st_name &_fgets_loop_end2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_fgets>ELF_str # st_name &f_fgets #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__fgets_loop1>ELF_str # st_name &_fgets_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_else2>ELF_str # st_name &_fgets_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_else4>ELF_str # st_name &_fgets_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_else3>ELF_str # st_name &_fgets_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_else5>ELF_str # st_name &_fgets_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__fgets_loop_end1>ELF_str # st_name &_fgets_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_add_define>ELF_str # st_name &f_add_define #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_f_find_define>ELF_str # st_name &f_find_define #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__find_define_loop1>ELF_str # st_name &_find_define_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__find_define_else2>ELF_str # st_name &_find_define_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__find_define_else3>ELF_str # st_name &_find_define_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__find_define_loop_end1>ELF_str # st_name &_find_define_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_output_hex>ELF_str # st_name &f_output_hex #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__output_hex_else1>ELF_str # st_name &_output_hex_else1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__output_hex_else_end1>ELF_str # st_name &_output_hex_else_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f_main>ELF_str # st_name &f_main #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str__main_loop1>ELF_str # st_name &_main_loop1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else2>ELF_str # st_name &_main_else2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else3>ELF_str # st_name &_main_else3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end3>ELF_str # st_name &_main_else_end3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end1>ELF_str # st_name &_main_loop_end1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else5>ELF_str # st_name &_main_else5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else4>ELF_str # st_name &_main_else4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop6>ELF_str # st_name &_main_loop6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else7>ELF_str # st_name &_main_else7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else8>ELF_str # st_name &_main_else8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop9>ELF_str # st_name &_main_loop9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else10>ELF_str # st_name &_main_else10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop12>ELF_str # st_name &_main_loop12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else13>ELF_str # st_name &_main_else13 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end12>ELF_str # st_name &_main_loop_end12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop14>ELF_str # st_name &_main_loop14 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else15>ELF_str # st_name &_main_else15 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end14>ELF_str # st_name &_main_loop_end14 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else16>ELF_str # st_name &_main_else16 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop17>ELF_str # st_name &_main_loop17 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else18>ELF_str # st_name &_main_else18 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end17>ELF_str # st_name &_main_loop_end17 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop19>ELF_str # st_name &_main_loop19 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else20>ELF_str # st_name &_main_else20 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end19>ELF_str # st_name &_main_loop_end19 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else21>ELF_str # st_name &_main_else21 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else11>ELF_str # st_name &_main_else11 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop22>ELF_str # st_name &_main_loop22 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end23>ELF_str # st_name &_main_or_end23 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else24>ELF_str # st_name &_main_else24 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end22>ELF_str # st_name &_main_loop_end22 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop25>ELF_str # st_name &_main_loop25 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_and_end26>ELF_str # st_name &_main_and_end26 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_and_end27>ELF_str # st_name &_main_and_end27 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_and_end28>ELF_str # st_name &_main_and_end28 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else29>ELF_str # st_name &_main_else29 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else30>ELF_str # st_name &_main_else30 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end31>ELF_str # st_name &_main_or_end31 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_and_end33>ELF_str # st_name &_main_and_end33 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end34>ELF_str # st_name &_main_or_end34 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_and_end32>ELF_str # st_name &_main_and_end32 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else36>ELF_str # st_name &_main_else36 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end36>ELF_str # st_name &_main_else_end36 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else37>ELF_str # st_name &_main_else37 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop38>ELF_str # st_name &_main_loop38 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_and_end39>ELF_str # st_name &_main_and_end39 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else40>ELF_str # st_name &_main_else40 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end38>ELF_str # st_name &_main_loop_end38 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop41>ELF_str # st_name &_main_loop41 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else42>ELF_str # st_name &_main_else42 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end41>ELF_str # st_name &_main_loop_end41 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else35>ELF_str # st_name &_main_else35 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end43>ELF_str # st_name &_main_or_end43 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end44>ELF_str # st_name &_main_or_end44 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_or_end45>ELF_str # st_name &_main_or_end45 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop47>ELF_str # st_name &_main_loop47 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else48>ELF_str # st_name &_main_else48 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end47>ELF_str # st_name &_main_loop_end47 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else46>ELF_str # st_name &_main_else46 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop50>ELF_str # st_name &_main_loop50 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_and_end51>ELF_str # st_name &_main_and_end51 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else52>ELF_str # st_name &_main_else52 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end50>ELF_str # st_name &_main_loop_end50 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else53>ELF_str # st_name &_main_else53 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else49>ELF_str # st_name &_main_else49 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop54>ELF_str # st_name &_main_loop54 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else55>ELF_str # st_name &_main_else55 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end54>ELF_str # st_name &_main_loop_end54 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end49>ELF_str # st_name &_main_else_end49 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end46>ELF_str # st_name &_main_else_end46 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end35>ELF_str # st_name &_main_else_end35 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end30>ELF_str # st_name &_main_else_end30 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end25>ELF_str # st_name &_main_loop_end25 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop56>ELF_str # st_name &_main_loop56 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else57>ELF_str # st_name &_main_else57 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else58>ELF_str # st_name &_main_else58 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end58>ELF_str # st_name &_main_else_end58 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end56>ELF_str # st_name &_main_loop_end56 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_else_end11>ELF_str # st_name &_main_else_end11 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end9>ELF_str # st_name &_main_loop_end9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str__main_loop_end6>ELF_str # st_name &_main_loop_end6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 02 # st_other (hidden) 0100 # st_shndx %ELF_str_f___init_globals__>ELF_str # st_name &f___init_globals__ #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_ELF_data>ELF_str # st_name &ELF_data #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_SYS_MALLOC>ELF_str # st_name &SYS_MALLOC #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_0>ELF_str # st_name &string_0 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_1>ELF_str # st_name &string_1 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_2>ELF_str # st_name &string_2 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_3>ELF_str # st_name &string_3 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_4>ELF_str # st_name &string_4 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_5>ELF_str # st_name &string_5 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_6>ELF_str # st_name &string_6 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_7>ELF_str # st_name &string_7 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_8>ELF_str # st_name &string_8 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_9>ELF_str # st_name &string_9 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_10>ELF_str # st_name &string_10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_11>ELF_str # st_name &string_11 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_12>ELF_str # st_name &string_12 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_13>ELF_str # st_name &string_13 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_14>ELF_str # st_name &string_14 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_15>ELF_str # st_name &string_15 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_16>ELF_str # st_name &string_16 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_17>ELF_str # st_name &string_17 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_18>ELF_str # st_name &string_18 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_19>ELF_str # st_name &string_19 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_20>ELF_str # st_name &string_20 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_string_21>ELF_str # st_name &string_21 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g___sys_stdin>ELF_str # st_name &g___sys_stdin #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g___sys_stdout>ELF_str # st_name &g___sys_stdout #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g___sys_stderr>ELF_str # st_name &g___sys_stderr #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_stdin>ELF_str # st_name &g_stdin #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_stdout>ELF_str # st_name &g_stdout #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_stderr>ELF_str # st_name &g_stderr #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_errno>ELF_str # st_name &g_errno #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_GCC>ELF_str # st_name &g_LINE_MACRO_OUTPUT_FORMAT_GCC #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_NONE>ELF_str # st_name &g_LINE_MACRO_OUTPUT_FORMAT_NONE #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_STD>ELF_str # st_name &g_LINE_MACRO_OUTPUT_FORMAT_STD #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_LINE_MACRO_OUTPUT_FORMAT_P10>ELF_str # st_name &g_LINE_MACRO_OUTPUT_FORMAT_P10 #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g__sys_env>ELF_str # st_name &g__sys_env #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_g_defines>ELF_str # st_name &g_defines #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_static_0_line>ELF_str # st_name &static_0_line #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx %ELF_str_ELF_end>ELF_str # st_name &ELF_end #st_value 00000000 # st_size (unknown size) 02 # st_info (FUNC) 00 # st_other (default) 0100 # st_shndx # END Generated symbol table :ELF_end
DEFINE pop_eax 58
DEFINE pop_ebx 5B
DEFINE pop_ecx 59
DEFINE pop_edx 5A
DEFINE pop_edi 5F
DEFINE push_eax 50
DEFINE push_ebx 53
DEFINE push_edi 57
DEFINE mov_eax, B8
DEFINE mov_ebx, BB
DEFINE mov_edx, BA
DEFINE mov_eax,[DWORD] 8B05
DEFINE mov_ebx,[DWORD] 8B1D
DEFINE mov_eax,ebx 89D8
DEFINE mov_eax,edx 89D0
DEFINE mov_edx,eax 89C2
DEFINE mov_ebx,eax 89C3
DEFINE mov_ebx,esp 89E3
DEFINE mov_ecx,eax 89C1
DEFINE mov_ebp,eax 89C5
DEFINE mov_al,[eax] 8A00
DEFINE mov_ax,[eax] 668B00
DEFINE mov_eax,[eax] 8B00
DEFINE mov_ebx,[ebp] 8B5D00
DEFINE mov_eax,[ebp+DWORD] 8B85
DEFINE lea_eax,[ebp+DWORD] 8D85
DEFINE lea_ecx,[ebp+DWORD] 8D8D
DEFINE mov_[DWORD],eax A3
DEFINE mov_[DWORD],ebx 891D
DEFINE mov_[ecx],eax 8901
DEFINE mov_[eax],ebx 8918
DEFINE mov_[ebx],al 8803
DEFINE mov_[ebx],ax 668903
DEFINE mov_[ebx],eax 8903
DEFINE mov_[ebp],eax 894500
DEFINE mov_[eax],bl 8818
DEFINE add_eax, 81C0
DEFINE add_eax,ebx 01D8
DEFINE add_ebx,eax 01C3
DEFINE sub_ebx,eax 29C3
DEFINE shl_eax,cl D3E0
DEFINE shr_eax,cl D3E8
DEFINE cdq 99
DEFINE mul_ebx F7E3
DEFINE div_ebx F7F3
DEFINE idiv_ebx F7FB
DEFINE and_eax, 25
DEFINE and_eax,ebx 21D8
DEFINE or_eax,ebx 09D8
DEFINE xor_eax,ebx 31D8
DEFINE not_eax F7D0
DEFINE add_ebp, 81C5
DEFINE sub_ebp, 81ED
DEFINE cmp_eax_ebx 39C3
DEFINE seta_al 0F97C0
DEFINE setae_al 0F93C0
DEFINE setb_al 0F92C0
DEFINE setbe_al 0F96C0
DEFINE sete_al 0F94C0
DEFINE setle_al 0F9EC0
DEFINE setl_al 0F9CC0
DEFINE setge_al 0F9DC0
DEFINE setg_al 0F9FC0
DEFINE setne_al 0F95C0
DEFINE movsx_eax,al 0FBEC0
DEFINE movzx_eax,al 0FB6C0
DEFINE test_eax,eax 85C0
DEFINE jmp E9
DEFINE je 0F84
DEFINE jne 0F85
DEFINE jle 0F8E
DEFINE call E8
DEFINE call_eax FFD0
DEFINE ret C3
DEFINE int_80 CD80
DEFINE NULL 00000000
:ELF_text
:_start
mov_eax, %45 # the Syscall # for SYS_BRK
mov_ebx, %0 # Get current brk
int_80 # Let the kernel do the work
mov_[DWORD],eax &SYS_MALLOC # Set our malloc pointer
# allocate memory for the second stack
mov_eax, %100000
push_eax # (sys_malloc assums address)
call %f_sys_malloc
mov_ebp,eax
# setup argc and argv for the main function
mov_edx,eax
pop_eax
mov_ebx,esp
push_eax
push_ebx
mov_eax,edx
#call main
call %f_main
# program completed Successfully
mov_ebx,eax # All is well
mov_eax, %1 # put the exit syscall number in eax
int_80 # Call it a good day
# These sys_ function follow the same calling conventions
# as all the other functions. To access the arguments on the stack
# the return address is stored in the edi address (which is only possible
# because these functions do not call other function) and the function
# address (which is stored in the eax register, the top of the stack)
# needs to be popped as well.
:f_sys_int80
pop_edi # Save return address from the stack
pop_edx # Get the arguments from the stack
pop_ecx
pop_ebx
pop_eax
int_80 # call the Kernel
push_edi # restore return address to the stack
ret
:f_sys_malloc
pop_edi
pop_eax
mov_ebx,[DWORD] &SYS_MALLOC # Using the current pointer
add_ebx,eax # Request the number of desired bytes
mov_eax, %45 # the Syscall # for SYS_BRK
int_80 # call the Kernel
mov_eax,[DWORD] &SYS_MALLOC # Return pointer
mov_[DWORD],ebx &SYS_MALLOC # Update pointer
push_edi
ret
:SYS_MALLOC
NULL
:f_exit
pop_eax
mov_[ebp],eax
pop_eax
push_eax # result (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 8
push_eax # 1
mov_eax, %1
push_eax # result (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_memcpy
pop_eax
mov_[ebp],eax
pop_eax
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # src (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # dest (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # d (local)
lea_eax,[ebp+DWORD] %16
push_eax # dest (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
push_eax # src (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 34
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_memcpy_loop1
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_memcpy_else2
jmp %_memcpy_loop_end1
# stdlib.c 35
:_memcpy_else2 # no else
push_eax # d (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_memcpy_loop1
:_memcpy_loop_end1
# stdlib.c 36
push_eax # dest (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_memmove
pop_eax
mov_[ebp],eax
pop_eax
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # src (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # dest (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # d (local)
lea_eax,[ebp+DWORD] %16
push_eax # dest (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
push_eax # src (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 43
push_eax # 1
mov_eax, %1
test_eax,eax # if
pop_eax
je %_memmove_else1
# stdlib.c 44
# stdlib.c 45
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_memmove_loop2
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # <
cmp_eax_ebx
setb_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_memmove_else3
jmp %_memmove_loop_end2
# stdlib.c 46
:_memmove_else3 # no else
push_eax # d (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_memmove_loop2
:_memmove_loop_end2
jmp %_memmove_else_end1
:_memmove_else1
# stdlib.c 48
push_eax # src (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # dest (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # <
cmp_eax_ebx
setb_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_memmove_else4
# stdlib.c 49
push_eax # j (local)
lea_eax,[ebp+DWORD] %24
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 51
push_eax # i (local)
lea_eax,[ebp+DWORD] %28
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_memmove_loop5
push_eax # i (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # <
cmp_eax_ebx
setb_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_memmove_else6
jmp %_memmove_loop_end5
# stdlib.c 52
:_memmove_else6 # no else
push_eax # d (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # j (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # j (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %28
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
push_eax # j (local)
lea_eax,[ebp+DWORD] %24
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_eax # ;
jmp %_memmove_loop5
:_memmove_loop_end5
:_memmove_else4 # no else
:_memmove_else_end1
# stdlib.c 54
push_eax # dest (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_memset
pop_eax
mov_[ebp],eax
pop_eax
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # c (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # p (local)
lea_eax,[ebp+DWORD] %16
push_eax # s (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 60
push_eax # i (local)
lea_eax,[ebp+DWORD] %20
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_memset_loop1
push_eax # i (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # <
cmp_eax_ebx
setb_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_memset_else2
jmp %_memset_loop_end1
# stdlib.c 61
:_memset_else2 # no else
push_eax # p (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # c (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %20
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_memset_loop1
:_memset_loop_end1
# stdlib.c 62
push_eax # s (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_memcmp
pop_eax
mov_[ebp],eax
pop_eax
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s2 (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s1 (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # p1 (local)
lea_eax,[ebp+DWORD] %16
push_eax # s1 (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # p2 (local)
lea_eax,[ebp+DWORD] %20
push_eax # s2 (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 69
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_memcmp_loop1
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # <
cmp_eax_ebx
setb_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_memcmp_else2
jmp %_memcmp_loop_end1
# stdlib.c 70
:_memcmp_else2 # no else
push_eax # result (local)
lea_eax,[ebp+DWORD] %28
push_eax # p1 (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # p2 (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 72
push_eax # result (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_memcmp_else3
# stdlib.c 73
push_eax # result (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
:_memcmp_else3 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
push_eax # p1 (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
push_eax # p2 (local)
lea_eax,[ebp+DWORD] %20
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_memcmp_loop1
:_memcmp_loop_end1
# stdlib.c 75
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strlen
pop_eax
mov_[ebp],eax
pop_eax
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # len (local)
lea_eax,[ebp+DWORD] %8
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 81
:_strlen_loop1
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strlen_else2
jmp %_strlen_loop_end1
# stdlib.c 82
:_strlen_else2 # no else
push_eax # len (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_strlen_loop1
:_strlen_loop_end1
# stdlib.c 83
push_eax # len (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strcpy
pop_eax
mov_[ebp],eax
pop_eax
push_eax # src (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # dest (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
push_eax # dest (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 89
:_strcpy_loop1
push_eax # src (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strcpy_else2
jmp %_strcpy_loop_end1
# stdlib.c 90
:_strcpy_else2 # no else
push_eax # dest (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # src (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %_strcpy_loop1
:_strcpy_loop_end1
# stdlib.c 91
push_eax # dest (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 92
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strncpy
pop_eax
mov_[ebp],eax
pop_eax
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # src (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # dest (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # d (local)
lea_eax,[ebp+DWORD] %16
push_eax # dest (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
push_eax # src (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 99
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_strncpy_loop1
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strncpy_else2
jmp %_strncpy_loop_end1
# stdlib.c 100
# stdlib.c 101
:_strncpy_else2 # no else
push_eax # d (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 102
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strncpy_else3
# stdlib.c 103
jmp %_strncpy_loop_end1
:_strncpy_else3 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_strncpy_loop1
:_strncpy_loop_end1
# stdlib.c 105
push_eax # dest (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strcat
pop_eax
mov_[ebp],eax
pop_eax
push_eax # src (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # dest (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 110
push_eax # dest (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # dest (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # strlen (function)
mov_eax, &f_strlen
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_ebx # +
add_eax,ebx
push_eax # src (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # strcpy (function)
mov_eax, &f_strcpy
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
# stdlib.c 111
push_eax # dest (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strchr
pop_eax
mov_[ebp],eax
pop_eax
push_eax # c (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 116
:_strchr_loop1
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strchr_else2
jmp %_strchr_loop_end1
# stdlib.c 117
:_strchr_else2 # no else
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # c (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strchr_else3
# stdlib.c 118
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
:_strchr_else3 # no else
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_strchr_loop1
:_strchr_loop_end1
# stdlib.c 119
push_eax # c (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strchr_else4
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
jmp %_strchr_else_end4
:_strchr_else4
push_eax # 0
mov_eax, %0
:_strchr_else_end4
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strrchr
pop_eax
mov_[ebp],eax
pop_eax
push_eax # c (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # n (local)
lea_eax,[ebp+DWORD] %12
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # strlen (function)
mov_eax, &f_strlen
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 125
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
push_eax # n (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_strrchr_loop1
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strrchr_else2
jmp %_strrchr_loop_end1
# stdlib.c 126
:_strrchr_else2 # no else
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # c (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strrchr_else3
# stdlib.c 127
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_ebx,[ebp] # return
push_ebx
ret
:_strrchr_else3 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_eax # ;
jmp %_strrchr_loop1
:_strrchr_loop_end1
# stdlib.c 128
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strcmp
pop_eax
mov_[ebp],eax
pop_eax
push_eax # s2 (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s1 (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 133
:_strcmp_loop1
# stdlib.c 134
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
push_eax # s1 (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # s2 (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 136
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # ||
jne %_strcmp_or_end2
pop_eax
push_eax # s1 (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_strcmp_or_end2
test_eax,eax # if
pop_eax
je %_strcmp_else3
# stdlib.c 137
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
# stdlib.c 138
:_strcmp_else3 # no else
push_eax # s1 (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 139
push_eax # s2 (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_strcmp_loop1
:_strcmp_loop_end1
# stdlib.c 141
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strncmp
pop_eax
mov_[ebp],eax
pop_eax
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s2 (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s1 (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 146
:_strncmp_loop1
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >
cmp_eax_ebx
seta_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strncmp_else2
jmp %_strncmp_loop_end1
# stdlib.c 147
:_strncmp_else2 # no else
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
push_eax # s1 (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # s2 (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 149
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # ||
jne %_strncmp_or_end3
pop_eax
push_eax # s1 (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_strncmp_or_end3
test_eax,eax # if
pop_eax
je %_strncmp_else4
# stdlib.c 150
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
# stdlib.c 151
:_strncmp_else4 # no else
push_eax # s1 (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 152
push_eax # s2 (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
push_eax # n (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_eax # ;
jmp %_strncmp_loop1
:_strncmp_loop_end1
# stdlib.c 154
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strstr
pop_eax
mov_[ebp],eax
pop_eax
push_eax # needle (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # haystack (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # n (local)
lea_eax,[ebp+DWORD] %12
push_eax # needle (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # strlen (function)
mov_eax, &f_strlen
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 160
:_strstr_loop1
push_eax # haystack (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strstr_else2
jmp %_strstr_loop_end1
# stdlib.c 161
:_strstr_else2 # no else
push_eax # haystack (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # needle (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # n (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # strncmp (function)
mov_eax, &f_strncmp
add_ebp, %16 # ()
call_eax
sub_ebp, %16
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strstr_else3
# stdlib.c 162
push_eax # haystack (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
:_strstr_else3 # no else
push_eax # haystack (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_strstr_loop1
:_strstr_loop_end1
# stdlib.c 163
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strtoul
pop_eax
mov_[ebp],eax
pop_eax
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 169
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strtoul_else1
# stdlib.c 170
# stdlib.c 171
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
push_eax # 10
mov_eax, %10
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 172
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 48
mov_eax, %48
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strtoul_else2
# stdlib.c 173
# stdlib.c 174
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
push_eax # 8
mov_eax, %8
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 175
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 176
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 120
mov_eax, %120
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # ||
jne %_strtoul_or_end3
pop_eax
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 88
mov_eax, %88
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_strtoul_or_end3
test_eax,eax # if
pop_eax
je %_strtoul_else4
# stdlib.c 177
# stdlib.c 178
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
push_eax # 16
mov_eax, %16
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 179
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
:_strtoul_else4 # no else
:_strtoul_else2 # no else
:_strtoul_else1 # no else
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # sub_10 (local)
lea_eax,[ebp+DWORD] %20
push_eax # 48
mov_eax, %48
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 10
mov_eax, %10
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strtoul_else5
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
jmp %_strtoul_else_end5
:_strtoul_else5
push_eax # 10
mov_eax, %10
:_strtoul_else_end5
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 185
:_strtoul_loop6
# stdlib.c 186
# stdlib.c 187
push_eax # 48
mov_eax, %48
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_strtoul_and_end7
pop_eax
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # sub_10 (local)
lea_eax,[ebp+DWORD] %20
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
:_strtoul_and_end7
test_eax,eax # if
pop_eax
je %_strtoul_else8
# stdlib.c 188
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_strtoul_else_end8
:_strtoul_else8
# stdlib.c 189
push_eax # 97
mov_eax, %97
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_strtoul_and_end9
pop_eax
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
:_strtoul_and_end9
test_eax,eax # if
pop_eax
je %_strtoul_else10
# stdlib.c 190
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_strtoul_else_end10
:_strtoul_else10
# stdlib.c 191
push_eax # 65
mov_eax, %65
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_strtoul_and_end11
pop_eax
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
:_strtoul_and_end11
test_eax,eax # if
pop_eax
je %_strtoul_else12
# stdlib.c 192
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # +
add_eax,ebx
push_eax # 65
mov_eax, %65
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_strtoul_else_end12
:_strtoul_else12
# stdlib.c 194
jmp %_strtoul_loop_end6
:_strtoul_else_end12
:_strtoul_else_end10
:_strtoul_else_end8
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_strtoul_loop6
:_strtoul_loop_end6
# stdlib.c 196
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strtoul_else13
# stdlib.c 197
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 198
:_strtoul_else13 # no else
push_eax # result (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strtol
pop_eax
mov_[ebp],eax
pop_eax
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # sign (local)
lea_eax,[ebp+DWORD] %16
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 204
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 45
mov_eax, %45
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_strtol_else1
# stdlib.c 205
# stdlib.c 206
push_eax # sign (local)
lea_eax,[ebp+DWORD] %16
push_eax # 4294967295
mov_eax, %4294967295
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 207
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 209
:_strtol_else1 # no else
push_eax # sign (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # strtoul (function)
mov_eax, &f_strtoul
add_ebp, %20 # ()
call_eax
sub_ebp, %20
pop_ebx # *
mul_ebx
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strtoll
pop_eax
mov_[ebp],eax
pop_eax
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 214
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # strtol (function)
mov_eax, &f_strtol
add_ebp, %16 # ()
call_eax
sub_ebp, %16
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strtoull
pop_eax
mov_[ebp],eax
pop_eax
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 219
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # base (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # strtoul (function)
mov_eax, &f_strtoul
add_ebp, %16 # ()
call_eax
sub_ebp, %16
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_strtof
pop_eax
mov_[ebp],eax
pop_eax
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # str (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 225
push_eax # endptr (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # str (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 226
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_malloc
pop_eax
mov_[ebp],eax
pop_eax
push_eax # size (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 231
push_eax # size (local)
lea_eax,[ebp+DWORD] %4
push_eax # size (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 3
mov_eax, %3
pop_ebx # +
add_eax,ebx
push_eax # 3
mov_eax, %3
not_eax # ~
pop_ebx # &
and_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # result (local)
lea_eax,[ebp+DWORD] %8
push_eax # size (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # sys_malloc (function)
mov_eax, &f_sys_malloc
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 233
push_eax # result (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 234
push_eax # result (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 4
mov_eax, %4
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 235
push_eax # result (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_realloc
pop_eax
mov_[ebp],eax
pop_eax
push_eax # size (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # ptr (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
push_eax # size (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # malloc (function)
mov_eax, &f_malloc
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 241
push_eax # ptr (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_realloc_else1
# stdlib.c 242
push_eax # old_ptr (local)
lea_eax,[ebp+DWORD] %16
push_eax # ptr (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # old_size (local)
lea_eax,[ebp+DWORD] %20
push_eax # old_ptr (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 4294967295
mov_eax, %4294967295
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
mov_ebx,eax # /s
pop_eax
cdq
idiv_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 245
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_realloc_loop2
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # old_size (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_realloc_else3
jmp %_realloc_loop_end2
# stdlib.c 246
:_realloc_else3 # no else
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # old_ptr (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_realloc_loop2
:_realloc_loop_end2
# stdlib.c 248
:_realloc_else1 # no else
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_calloc
pop_eax
mov_[ebp],eax
pop_eax
push_eax # S (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # N (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # len (local)
lea_eax,[ebp+DWORD] %12
push_eax # N (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # S (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # r (local)
lea_eax,[ebp+DWORD] %16
push_eax # len (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # malloc (function)
mov_eax, &f_malloc
add_ebp, %20 # ()
call_eax
sub_ebp, %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 255
push_eax # i (local)
lea_eax,[ebp+DWORD] %20
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_calloc_loop1
push_eax # i (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # len (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_calloc_else2
jmp %_calloc_loop_end1
# stdlib.c 256
:_calloc_else2 # no else
push_eax # r (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %20
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_calloc_loop1
:_calloc_loop_end1
# stdlib.c 257
push_eax # r (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_free
pop_eax
mov_[ebp],eax
pop_eax
push_eax # ptr (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 263
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fwrite
pop_eax
mov_[ebp],eax
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # nmemb (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # size (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # ptr (local)
lea_eax,[ebp+DWORD] %16
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 268
push_eax # 4
mov_eax, %4
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # ptr (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # nmemb (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %20 # ()
call_eax
sub_ebp, %20
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fputc
pop_eax
mov_[ebp],eax
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # c (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 273
push_eax # 4
mov_eax, %4
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # c (local)
lea_eax,[ebp+DWORD] %8
push_eax # 1
mov_eax, %1
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %12 # ()
call_eax
sub_ebp, %12
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fputs
pop_eax
mov_[ebp],eax
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 278
push_eax # 4
mov_eax, %4
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # strlen (function)
mov_eax, &f_strlen
add_ebp, %12 # ()
call_eax
sub_ebp, %12
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %12 # ()
call_eax
sub_ebp, %12
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f___sys_printf
pop_eax
mov_[ebp],eax
pop_eax
push_eax # args (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # len (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # trg (local)
lea_eax,[ebp+DWORD] %16
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # cnt (local)
lea_eax,[ebp+DWORD] %52
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # org_format (local)
lea_eax,[ebp+DWORD] %56
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 292
:___sys_printf_loop1
# stdlib.c 293
# stdlib.c 294
push_eax # len (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else2
# stdlib.c 295
jmp %___sys_printf_loop_end1
# stdlib.c 296
:___sys_printf_else2 # no else
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >s
cmp_eax_ebx
setg_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else3
# stdlib.c 297
# stdlib.c 298
push_eax # stream (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else4
# stdlib.c 299
push_eax # s (local)
lea_eax,[ebp+DWORD] %48
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # stream (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # fputc (function)
mov_eax, &f_fputc
add_ebp, %60 # ()
call_eax
sub_ebp, %60
pop_eax # ;
jmp %___sys_printf_else_end4
:___sys_printf_else4
# stdlib.c 300
push_eax # trg (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else5
# stdlib.c 301
push_eax # trg (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # s (local)
lea_eax,[ebp+DWORD] %48
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
:___sys_printf_else5 # no else
:___sys_printf_else_end4
# stdlib.c 302
push_eax # s (local)
lea_eax,[ebp+DWORD] %48
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 303
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_eax # ;
# stdlib.c 304
push_eax # cnt (local)
lea_eax,[ebp+DWORD] %52
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 305
push_eax # len (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >s
cmp_eax_ebx
setg_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else6
# stdlib.c 306
push_eax # len (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_eax # ;
:___sys_printf_else6 # no else
# stdlib.c 308
:___sys_printf_else3 # no else
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else7
# stdlib.c 309
# stdlib.c 310
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else8
# stdlib.c 311
jmp %___sys_printf_loop_end1
# stdlib.c 312
:___sys_printf_else8 # no else
push_eax # s (local)
lea_eax,[ebp+DWORD] %48
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 313
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 314
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 37
mov_eax, %37
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else9
# stdlib.c 315
# stdlib.c 316
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 317
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 37
mov_eax, %37
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else10
# stdlib.c 318
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
push_eax # 37
mov_eax, %37
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %___sys_printf_else_end10
:___sys_printf_else10
# stdlib.c 320
push_eax # modifier (local)
lea_eax,[ebp+DWORD] %60
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # sign (local)
lea_eax,[ebp+DWORD] %64
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 323
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 45
mov_eax, %45
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else11
# stdlib.c 324
# stdlib.c 325
push_eax # sign (local)
lea_eax,[ebp+DWORD] %64
push_eax # 4294967295
mov_eax, %4294967295
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 326
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 328
:___sys_printf_else11 # no else
:___sys_printf_loop12
push_eax # 48
mov_eax, %48
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %___sys_printf_and_end13
pop_eax
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 57
mov_eax, %57
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:___sys_printf_and_end13
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else14
jmp %___sys_printf_loop_end12
# stdlib.c 329
# stdlib.c 330
:___sys_printf_else14 # no else
push_eax # modifier (local)
lea_eax,[ebp+DWORD] %60
push_eax # 10
mov_eax, %10
push_eax # modifier (local)
lea_eax,[ebp+DWORD] %60
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 331
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %___sys_printf_loop12
:___sys_printf_loop_end12
# stdlib.c 333
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 115
mov_eax, %115
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else15
# stdlib.c 334
# stdlib.c 335
push_eax # s (local)
lea_eax,[ebp+DWORD] %48
push_eax # args (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 4
mov_eax, %4
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 336
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # s (local)
lea_eax,[ebp+DWORD] %48
mov_eax,[eax] # ?
push_eax # strlen (function)
mov_eax, &f_strlen
add_ebp, %68 # ()
call_eax
sub_ebp, %68
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %___sys_printf_else_end15
:___sys_printf_else15
# stdlib.c 338
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 100
mov_eax, %100
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else16
# stdlib.c 339
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
push_eax # args (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # b (local)
lea_eax,[ebp+DWORD] %72
push_eax # 20
mov_eax, %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 342
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else17
# stdlib.c 343
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # b (local)
lea_eax,[ebp+DWORD] %72
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %___sys_printf_else_end17
:___sys_printf_else17
# stdlib.c 345
# stdlib.c 346
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else18
# stdlib.c 346
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
push_eax # 0
mov_eax, %0
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 347
:___sys_printf_else18 # no else
:___sys_printf_loop19
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >s
cmp_eax_ebx
setg_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else20
jmp %___sys_printf_loop_end19
# stdlib.c 348
:___sys_printf_else20 # no else
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # b (local)
lea_eax,[ebp+DWORD] %72
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 10
mov_eax, %10
mov_ebx,eax # %s
pop_eax
cdq
idiv_ebx
mov_eax,edx pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 10
mov_eax, %10
mov_ebx,eax # /s
pop_eax
cdq
idiv_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %___sys_printf_loop19
:___sys_printf_loop_end19
# stdlib.c 349
push_eax # args (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else21
# stdlib.c 350
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # b (local)
lea_eax,[ebp+DWORD] %72
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_ebx # +
add_eax,ebx
push_eax # 45
mov_eax, %45
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
:___sys_printf_else21 # no else
:___sys_printf_else_end17
# stdlib.c 352
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # 20
mov_eax, %20
push_eax # b (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 353
push_eax # modifier (local)
lea_eax,[ebp+DWORD] %60
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >s
cmp_eax_ebx
setg_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else22
# stdlib.c 354
# stdlib.c 355
push_eax # modifier (local)
lea_eax,[ebp+DWORD] %60
mov_eax,[eax] # ?
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
mov_eax,[eax] # ?
pop_ebx # >s
cmp_eax_ebx
setg_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else23
# stdlib.c 356
# stdlib.c 357
push_eax # sign (local)
lea_eax,[ebp+DWORD] %64
mov_eax,[eax] # ?
push_eax # 4294967295
mov_eax, %4294967295
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else24
# stdlib.c 358
# stdlib.c 359
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
push_eax # 20
mov_eax, %20
push_eax # modifier (local)
lea_eax,[ebp+DWORD] %60
mov_eax,[eax] # ?
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:___sys_printf_loop25
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # 20
mov_eax, %20
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else26
jmp %___sys_printf_loop_end25
# stdlib.c 360
:___sys_printf_else26 # no else
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # b (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 20
mov_eax, %20
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else27
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # b (local)
lea_eax,[ebp+DWORD] %72
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
jmp %___sys_printf_else_end27
:___sys_printf_else27
push_eax # 32
mov_eax, %32
:___sys_printf_else_end27
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %___sys_printf_loop25
:___sys_printf_loop_end25
# stdlib.c 361
push_eax # b (local)
lea_eax,[ebp+DWORD] %72
push_eax # 20
mov_eax, %20
push_eax # modifier (local)
lea_eax,[ebp+DWORD] %60
mov_eax,[eax] # ?
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %___sys_printf_else_end24
:___sys_printf_else24
# stdlib.c 364
:___sys_printf_loop28
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
mov_eax,[eax] # ?
push_eax # modifier (local)
lea_eax,[ebp+DWORD] %60
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else29
jmp %___sys_printf_loop_end28
# stdlib.c 365
:___sys_printf_else29 # no else
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # b (local)
lea_eax,[ebp+DWORD] %72
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_ebx # +
add_eax,ebx
push_eax # 32
mov_eax, %32
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %___sys_printf_loop28
:___sys_printf_loop_end28
:___sys_printf_else_end24
# stdlib.c 367
:___sys_printf_else23 # no else
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # modifier (local)
lea_eax,[ebp+DWORD] %60
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 369
:___sys_printf_else22 # no else
push_eax # s (local)
lea_eax,[ebp+DWORD] %48
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # b (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 370
push_eax # args (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 4
mov_eax, %4
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %___sys_printf_else_end16
:___sys_printf_else16
# stdlib.c 372
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 117
mov_eax, %117
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else30
# stdlib.c 373
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
push_eax # args (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 4
mov_eax, %4
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 375
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else31
# stdlib.c 376
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %___sys_printf_else_end31
:___sys_printf_else31
# stdlib.c 378
# stdlib.c 379
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # 20
mov_eax, %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 380
:___sys_printf_loop32
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >
cmp_eax_ebx
seta_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else33
jmp %___sys_printf_loop_end32
# stdlib.c 381
:___sys_printf_else33 # no else
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 10
mov_eax, %10
mov_ebx,eax # %
pop_eax
mov_edx, %0
div_ebx
mov_eax,edx
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 10
mov_eax, %10
mov_ebx,eax # /
pop_eax
mov_edx, %0
div_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %___sys_printf_loop32
:___sys_printf_loop_end32
# stdlib.c 382
push_eax # s (local)
lea_eax,[ebp+DWORD] %48
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 383
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # 20
mov_eax, %20
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
mov_eax,[eax] # ?
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:___sys_printf_else_end31
jmp %___sys_printf_else_end30
:___sys_printf_else30
# stdlib.c 386
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 120
mov_eax, %120
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # ||
jne %___sys_printf_or_end34
pop_eax
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 112
mov_eax, %112
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:___sys_printf_or_end34
test_eax,eax # if
pop_eax
je %___sys_printf_else35
# stdlib.c 387
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
push_eax # args (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 4
mov_eax, %4
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 389
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else36
# stdlib.c 390
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %___sys_printf_else_end36
:___sys_printf_else36
# stdlib.c 392
# stdlib.c 393
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # 20
mov_eax, %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 394
:___sys_printf_loop37
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else38
jmp %___sys_printf_loop_end37
# stdlib.c 395
:___sys_printf_else38 # no else
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_ebx # +
add_eax,ebx
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 15
mov_eax, %15
pop_ebx # &
and_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # <
cmp_eax_ebx
setb_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else39
push_eax # 48
mov_eax, %48
jmp %___sys_printf_else_end39
:___sys_printf_else39
push_eax # 97
mov_eax, %97
push_eax # 10
mov_eax, %10
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
:___sys_printf_else_end39
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
mov_eax,[eax] # ?
push_eax # 15
mov_eax, %15
pop_ebx # &
and_eax,ebx
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # v (local)
lea_eax,[ebp+DWORD] %68
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
mov_ecx,eax # >>
pop_eax
shr_eax,cl
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %___sys_printf_loop37
:___sys_printf_loop_end37
# stdlib.c 396
push_eax # s (local)
lea_eax,[ebp+DWORD] %48
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 397
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # 20
mov_eax, %20
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
mov_eax,[eax] # ?
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:___sys_printf_else_end36
jmp %___sys_printf_else_end35
:___sys_printf_else35
# stdlib.c 400
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 99
mov_eax, %99
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %___sys_printf_else40
# stdlib.c 401
# stdlib.c 402
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
push_eax # args (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 4
mov_eax, %4
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %___sys_printf_else_end40
:___sys_printf_else40
# stdlib.c 405
# stdlib.c 406
push_eax # '__sys_printf %'
mov_eax, &string_0
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # fputs (function)
mov_eax, &f_fputs
add_ebp, %68 # ()
call_eax
sub_ebp, %68
pop_eax # ;
# stdlib.c 407
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # fputc (function)
mov_eax, &f_fputc
add_ebp, %68 # ()
call_eax
sub_ebp, %68
pop_eax # ;
# stdlib.c 408
push_eax # ' '
mov_eax, &string_1
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # fputs (function)
mov_eax, &f_fputs
add_ebp, %68 # ()
call_eax
sub_ebp, %68
pop_eax # ;
# stdlib.c 409
push_eax # org_format (local)
lea_eax,[ebp+DWORD] %56
mov_eax,[eax] # ?
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # fputs (function)
mov_eax, &f_fputs
add_ebp, %68 # ()
call_eax
sub_ebp, %68
pop_eax # ;
# stdlib.c 410
push_eax # '\n'
mov_eax, &string_2
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # fputs (function)
mov_eax, &f_fputs
add_ebp, %68 # ()
call_eax
sub_ebp, %68
pop_eax # ;
# stdlib.c 411
push_eax # 1
mov_eax, %1
push_eax # exit (function)
mov_eax, &f_exit
add_ebp, %68 # ()
call_eax
sub_ebp, %68
pop_eax # ;
:___sys_printf_else_end40
:___sys_printf_else_end35
:___sys_printf_else_end30
:___sys_printf_else_end16
:___sys_printf_else_end15
:___sys_printf_else_end10
jmp %___sys_printf_else_end9
:___sys_printf_else9
# stdlib.c 416
# stdlib.c 417
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 418
push_eax # s (local)
lea_eax,[ebp+DWORD] %48
push_eax # buffer (local)
lea_eax,[ebp+DWORD] %24
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 419
push_eax # l (local)
lea_eax,[ebp+DWORD] %44
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:___sys_printf_else_end9
# stdlib.c 421
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
:___sys_printf_else7 # no else
jmp %___sys_printf_loop1
:___sys_printf_loop_end1
# stdlib.c 424
push_eax # len (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # &&
je %___sys_printf_and_end41
pop_eax
push_eax # trg (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
:___sys_printf_and_end41
test_eax,eax # if
pop_eax
je %___sys_printf_else42
# stdlib.c 425
push_eax # trg (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 426
:___sys_printf_else42 # no else
push_eax # cnt (local)
lea_eax,[ebp+DWORD] %52
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_va_end
pop_eax
mov_[ebp],eax
pop_eax
push_eax # ap (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fprintf
pop_eax
mov_[ebp],eax
pop_eax
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 435
push_eax # ap (local)
lea_eax,[ebp+DWORD] %16
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 436
push_eax # stream (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 4294967295
mov_eax, %4294967295
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # ap (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # __sys_printf (function)
mov_eax, &f___sys_printf
add_ebp, %20 # ()
call_eax
sub_ebp, %20
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_printf
pop_eax
mov_[ebp],eax
pop_eax
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 442
push_eax # ap (local)
lea_eax,[ebp+DWORD] %12
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 443
push_eax # stdout (global)
mov_eax, &g_stdout
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 4294967295
mov_eax, %4294967295
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # ap (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # __sys_printf (function)
mov_eax, &f___sys_printf
add_ebp, %16 # ()
call_eax
sub_ebp, %16
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_sprintf
pop_eax
mov_[ebp],eax
pop_eax
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 449
push_eax # ap (local)
lea_eax,[ebp+DWORD] %16
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 450
push_eax # 0
mov_eax, %0
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # 4294967295
mov_eax, %4294967295
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # ap (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # __sys_printf (function)
mov_eax, &f___sys_printf
add_ebp, %20 # ()
call_eax
sub_ebp, %20
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_snprintf
pop_eax
mov_[ebp],eax
pop_eax
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # size (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # str (local)
lea_eax,[ebp+DWORD] %16
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 455
push_eax # ap (local)
lea_eax,[ebp+DWORD] %20
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 456
push_eax # 0
mov_eax, %0
push_eax # str (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # ap (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # __sys_printf (function)
mov_eax, &f___sys_printf
add_ebp, %24 # ()
call_eax
sub_ebp, %24
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_vsnprintf
pop_eax
mov_[ebp],eax
pop_eax
push_eax # ap (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # size (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # str (local)
lea_eax,[ebp+DWORD] %16
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 461
push_eax # 0
mov_eax, %0
push_eax # str (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # ap (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # __sys_printf (function)
mov_eax, &f___sys_printf
add_ebp, %20 # ()
call_eax
sub_ebp, %20
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_open
pop_eax
mov_[ebp],eax
pop_eax
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # flag (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # filename (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # mode (local)
lea_eax,[ebp+DWORD] %16
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 477
push_eax # flag (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # &
and_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_open_else1
# stdlib.c 478
# stdlib.c 480
push_eax # ap (local)
lea_eax,[ebp+DWORD] %20
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 481
push_eax # mode (local)
lea_eax,[ebp+DWORD] %16
push_eax # ap (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 483
:_open_else1 # no else
push_eax # 5
mov_eax, %5
push_eax # filename (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # flag (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # mode (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %20 # ()
call_eax
sub_ebp, %20
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_close
pop_eax
mov_[ebp],eax
pop_eax
push_eax # fd (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 488
push_eax # 6
mov_eax, %6
push_eax # fd (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %8 # ()
call_eax
sub_ebp, %8
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_read
pop_eax
mov_[ebp],eax
pop_eax
push_eax # count (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # buf (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # fd (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 493
push_eax # 3
mov_eax, %3
push_eax # fd (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # buf (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # count (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %16 # ()
call_eax
sub_ebp, %16
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_lseek
pop_eax
mov_[ebp],eax
pop_eax
push_eax # whence (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # offset (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # fd (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 498
push_eax # 19
mov_eax, %19
push_eax # fd (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # offset (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # whence (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %16 # ()
call_eax
sub_ebp, %16
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fopen
pop_eax
mov_[ebp],eax
pop_eax
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # pathname (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # rw (local)
lea_eax,[ebp+DWORD] %12
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 504
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 114
mov_eax, %114
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # ||
jne %_fopen_or_end1
pop_eax
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 119
mov_eax, %119
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_fopen_or_end1
test_eax,eax # if
pop_eax
je %_fopen_else2
# stdlib.c 505
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
:_fopen_else2 # no else
push_eax # bin (local)
lea_eax,[ebp+DWORD] %16
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 507
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 98
mov_eax, %98
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fopen_else3
# stdlib.c 508
# stdlib.c 509
push_eax # bin (local)
lea_eax,[ebp+DWORD] %16
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 510
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
:_fopen_else3 # no else
push_eax # plus (local)
lea_eax,[ebp+DWORD] %20
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 513
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 43
mov_eax, %43
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fopen_else4
# stdlib.c 514
# stdlib.c 515
push_eax # plus (local)
lea_eax,[ebp+DWORD] %20
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 516
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 518
:_fopen_else4 # no else
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fopen_else5
# stdlib.c 519
# stdlib.c 520
push_eax # 'Mode %s should be 'r/w(b)(+)', 'w', or 'wb'\n'
mov_eax, &string_3
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %24
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %24
push_eax # printf (function)
mov_eax, &f_printf
add_ebp, %28 # ()
call_eax
sub_ebp, %28
pop_eax # ;
# stdlib.c 521
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:_fopen_else5 # no else
push_eax # open_mode (local)
lea_eax,[ebp+DWORD] %24
push_eax # rw (local)
lea_eax,[ebp+DWORD] %12
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 114
mov_eax, %114
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fopen_else6
push_eax # plus (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fopen_else7
push_eax # 2
mov_eax, %2
jmp %_fopen_else_end7
:_fopen_else7
push_eax # 0
mov_eax, %0
:_fopen_else_end7
jmp %_fopen_else_end6
:_fopen_else6
push_eax # plus (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fopen_else8
push_eax # 2
mov_eax, %2
jmp %_fopen_else_end8
:_fopen_else8
push_eax # 1
mov_eax, %1
:_fopen_else_end8
push_eax # 64
mov_eax, %64
pop_ebx # |
or_eax,ebx
push_eax # 512
mov_eax, %512
pop_ebx # |
or_eax,ebx
:_fopen_else_end6
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # fh (local)
lea_eax,[ebp+DWORD] %28
push_eax # 5
mov_eax, %5
push_eax # pathname (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # open_mode (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # 511
mov_eax, %511
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %32 # ()
call_eax
sub_ebp, %32
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 528
push_eax # fh (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fopen_else9
# stdlib.c 529
# stdlib.c 530
push_eax # 'fopen %s %s returned %d\n'
mov_eax, &string_4
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %32
push_eax # pathname (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %32
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %32
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # fh (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %32
push_eax # printf (function)
mov_eax, &f_printf
add_ebp, %44 # ()
call_eax
sub_ebp, %44
pop_eax # ;
# stdlib.c 531
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:_fopen_else9 # no else
push_eax # f (local)
lea_eax,[ebp+DWORD] %32
push_eax # 8
mov_eax, %8
push_eax # malloc (function)
mov_eax, &f_malloc
add_ebp, %36 # ()
call_eax
sub_ebp, %36
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 534
push_eax # f (local)
lea_eax,[ebp+DWORD] %32
mov_eax,[eax] # ->
add_eax, %0
push_eax # fh (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 535
push_eax # f (local)
lea_eax,[ebp+DWORD] %32
mov_eax,[eax] # ->
add_eax, %4
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 536
push_eax # f (local)
lea_eax,[ebp+DWORD] %32
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fdopen
pop_eax
mov_[ebp],eax
pop_eax
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # fd (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # f (local)
lea_eax,[ebp+DWORD] %12
push_eax # 8
mov_eax, %8
push_eax # malloc (function)
mov_eax, &f_malloc
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 542
push_eax # f (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ->
add_eax, %0
push_eax # fd (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 543
push_eax # f (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ->
add_eax, %4
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 544
push_eax # f (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fclose
pop_eax
mov_[ebp],eax
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 549
push_eax # 6
mov_eax, %6
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %8 # ()
call_eax
sub_ebp, %8
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fflush
pop_eax
mov_[ebp],eax
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 555
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fseek
pop_eax
mov_[ebp],eax
pop_eax
push_eax # whence (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # offset (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 560
push_eax # stream (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # offset (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # whence (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # lseek (function)
mov_eax, &f_lseek
add_ebp, %16 # ()
call_eax
sub_ebp, %16
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_ftell
pop_eax
mov_[ebp],eax
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 565
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 1
mov_eax, %1
push_eax # lseek (function)
mov_eax, &f_lseek
add_ebp, %8 # ()
call_eax
sub_ebp, %8
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fread
pop_eax
mov_[ebp],eax
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # nmemb (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # size (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # ptr (local)
lea_eax,[ebp+DWORD] %16
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
push_eax # ptr (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 571
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_fread_loop1
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # nmemb (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fread_else2
jmp %_fread_loop_end1
# stdlib.c 572
:_fread_else2 # no else
push_eax # r (local)
lea_eax,[ebp+DWORD] %28
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # read (function)
mov_eax, &f_read
add_ebp, %32 # ()
call_eax
sub_ebp, %32
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 574
push_eax # r (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # <
cmp_eax_ebx
setb_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fread_else3
# stdlib.c 575
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
# stdlib.c 576
:_fread_else3 # no else
push_eax # s (local)
lea_eax,[ebp+DWORD] %20
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_fread_loop1
:_fread_loop_end1
# stdlib.c 578
push_eax # nmemb (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_lseek
pop_eax
mov_[ebp],eax
pop_eax
push_eax # whence (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # offset (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # fd (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 587
push_eax # 19
mov_eax, %19
push_eax # fd (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # offset (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # whence (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %16 # ()
call_eax
sub_ebp, %16
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_feof
pop_eax
mov_[ebp],eax
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 592
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %4
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fgetc
pop_eax
mov_[ebp],eax
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 597
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %4
mov_eax,[eax] # ?
test_eax,eax # if
pop_eax
je %_fgetc_else1
# stdlib.c 598
push_eax # 4294967295
mov_eax, %4294967295
mov_ebx,[ebp] # return
push_ebx
ret
:_fgetc_else1 # no else
push_eax # ret (local)
lea_eax,[ebp+DWORD] %12
push_eax # 3
mov_eax, %3
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # ch (local)
lea_eax,[ebp+DWORD] %8
push_eax # 1
mov_eax, %1
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 601
push_eax # ret (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fgetc_else2
# stdlib.c 602
# stdlib.c 603
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %4
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 604
push_eax # 4294967295
mov_eax, %4294967295
mov_ebx,[ebp] # return
push_ebx
ret
# stdlib.c 606
:_fgetc_else2 # no else
push_eax # ch (local)
lea_eax,[ebp+DWORD] %8
mov_al,[eax] # ?1
movzx_eax,al
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_ldexp
pop_eax
mov_[ebp],eax
pop_eax
push_eax # exp (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # x (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
push_eax # x (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 613
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_ldexp_loop1
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # exp (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_ldexp_else2
jmp %_ldexp_loop_end1
# stdlib.c 614
:_ldexp_else2 # no else
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # x (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_ldexp_loop1
:_ldexp_loop_end1
# stdlib.c 615
push_eax # result (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_time
pop_eax
mov_[ebp],eax
pop_eax
push_eax # tloc (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 621
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # 'TODO time\n'
mov_eax, &string_5
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stdlib.c 621
push_eax # 1
mov_eax, %1
push_eax # exit (function)
mov_eax, &f_exit
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_localtime
pop_eax
mov_[ebp],eax
pop_eax
push_eax # timep (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 638
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # 'TODO localtime\n'
mov_eax, &string_6
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stdlib.c 638
push_eax # 1
mov_eax, %1
push_eax # exit (function)
mov_eax, &f_exit
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_gettimeofday
pop_eax
mov_[ebp],eax
pop_eax
push_eax # tz (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # tv (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 651
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_write
pop_eax
mov_[ebp],eax
pop_eax
push_eax # count (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # buf (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # fd (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 667
push_eax # 4
mov_eax, %4
push_eax # fd (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # buf (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # count (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %16 # ()
call_eax
sub_ebp, %16
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fileno
pop_eax
mov_[ebp],eax
pop_eax
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 672
push_eax # stream (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_getcwd
pop_eax
mov_[ebp],eax
pop_eax
push_eax # size (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # buf (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 681
push_eax # 183
mov_eax, %183
push_eax # buf (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
# stdlib.c 682
push_eax # buf (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_getenv
pop_eax
mov_[ebp],eax
pop_eax
push_eax # name (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # len (local)
lea_eax,[ebp+DWORD] %8
push_eax # name (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # strlen (function)
mov_eax, &f_strlen
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 690
push_eax # env (local)
lea_eax,[ebp+DWORD] %12
push_eax # _sys_env (global)
mov_eax, &g__sys_env
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_getenv_loop1
push_eax # env (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_getenv_else2
jmp %_getenv_loop_end1
# stdlib.c 691
:_getenv_else2 # no else
push_eax # env (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_eax,[eax] # ?
push_eax # name (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # len (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # strncmp (function)
mov_eax, &f_strncmp
add_ebp, %16 # ()
call_eax
sub_ebp, %16
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # &&
je %_getenv_and_end3
pop_eax
push_eax # env (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_eax,[eax] # ?
push_eax # len (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 61
mov_eax, %61
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_getenv_and_end3
test_eax,eax # if
pop_eax
je %_getenv_else4
# stdlib.c 692
push_eax # env (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_eax,[eax] # ?
push_eax # len (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
mov_ebx,[ebp] # return
push_ebx
ret
:_getenv_else4 # no else
push_eax # env (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 4
mov_eax, %4
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_getenv_loop1
:_getenv_loop_end1
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_qsort
pop_eax
mov_[ebp],eax
pop_eax
push_eax # compar (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # size (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # nmemb (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # base (local)
lea_eax,[ebp+DWORD] %16
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 698
push_eax # go (local)
lea_eax,[ebp+DWORD] %20
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_qsort_loop1
push_eax # go (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_qsort_else2
jmp %_qsort_loop_end1
# stdlib.c 699
# stdlib.c 700
:_qsort_else2 # no else
push_eax # go (local)
lea_eax,[ebp+DWORD] %20
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 701
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_qsort_loop3
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
push_eax # nmemb (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_qsort_else4
jmp %_qsort_loop_end3
# stdlib.c 702
:_qsort_else4 # no else
push_eax # arg1 (local)
lea_eax,[ebp+DWORD] %28
push_eax # base (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # arg2 (local)
lea_eax,[ebp+DWORD] %32
push_eax # base (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # size (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # sign (local)
lea_eax,[ebp+DWORD] %36
push_eax # arg1 (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
push_eax # arg2 (local)
lea_eax,[ebp+DWORD] %32
mov_eax,[eax] # ?
push_eax # compar (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
add_ebp, %40 # ()
call_eax
sub_ebp, %40
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 706
push_eax # sign (local)
lea_eax,[ebp+DWORD] %36
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >s
cmp_eax_ebx
setg_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_qsort_else5
# stdlib.c 707
# stdlib.c 708
push_eax # go (local)
lea_eax,[ebp+DWORD] %20
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 709
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_qsort_loop6
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_qsort_else7
jmp %_qsort_loop_end6
# stdlib.c 710
:_qsort_else7 # no else
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
mov_eax,[eax] # ?
push_eax # 3
mov_eax, %3
pop_ebx # +
add_eax,ebx
push_eax # size (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_qsort_else8
# stdlib.c 711
push_eax # h (local)
lea_eax,[ebp+DWORD] %44
push_eax # arg1 (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 714
push_eax # arg1 (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # arg2 (local)
lea_eax,[ebp+DWORD] %32
mov_eax,[eax] # ?
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 715
push_eax # arg2 (local)
lea_eax,[ebp+DWORD] %32
mov_eax,[eax] # ?
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # h (local)
lea_eax,[ebp+DWORD] %44
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 716
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 3
mov_eax, %3
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_qsort_else_end8
:_qsort_else8
# stdlib.c 719
push_eax # h (local)
lea_eax,[ebp+DWORD] %44
push_eax # arg1 (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 722
push_eax # arg1 (local)
lea_eax,[ebp+DWORD] %28
mov_eax,[eax] # ?
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # arg2 (local)
lea_eax,[ebp+DWORD] %32
mov_eax,[eax] # ?
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 723
push_eax # arg2 (local)
lea_eax,[ebp+DWORD] %32
mov_eax,[eax] # ?
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # h (local)
lea_eax,[ebp+DWORD] %44
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
:_qsort_else_end8
push_eax # j (local)
lea_eax,[ebp+DWORD] %40
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_qsort_loop6
:_qsort_loop_end6
:_qsort_else5 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %24
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_qsort_loop3
:_qsort_loop_end3
jmp %_qsort_loop1
:_qsort_loop_end1
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_time
pop_eax
mov_[ebp],eax
pop_eax
push_eax # tloc (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 733
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # 'TODO time\n'
mov_eax, &string_5
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stdlib.c 733
push_eax # 1
mov_eax, %1
push_eax # exit (function)
mov_eax, &f_exit
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_setjmp
pop_eax
mov_[ebp],eax
pop_eax
push_eax # env (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 739
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # 'TODO setjmp\n'
mov_eax, &string_7
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stdlib.c 739
push_eax # 1
mov_eax, %1
push_eax # exit (function)
mov_eax, &f_exit
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stdlib.c 740
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_longjmp
pop_eax
mov_[ebp],eax
pop_eax
push_eax # val (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # env (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 746
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # 'TODO longjmp\n'
mov_eax, &string_8
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
# stdlib.c 746
push_eax # 0
mov_eax, %0
push_eax # exit (function)
mov_eax, &f_exit
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
# stdlib.c 747
push_eax # 4294967295
mov_eax, %4294967295
push_eax # exit (function)
mov_eax, &f_exit
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_unlink
pop_eax
mov_[ebp],eax
pop_eax
push_eax # pathname (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 752
push_eax # 10
mov_eax, %10
push_eax # pathname (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %8 # ()
call_eax
sub_ebp, %8
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_sscanf
pop_eax
mov_[ebp],eax
pop_eax
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 758
push_eax # ap (local)
lea_eax,[ebp+DWORD] %16
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # args_parsed (local)
lea_eax,[ebp+DWORD] %20
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 762
:_sscanf_loop1
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_sscanf_else2
jmp %_sscanf_loop_end1
# stdlib.c 763
:_sscanf_else2 # no else
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_sscanf_else3
# stdlib.c 764
jmp %_sscanf_loop_end1
jmp %_sscanf_else_end3
:_sscanf_else3
# stdlib.c 765
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 37
mov_eax, %37
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_sscanf_else4
# stdlib.c 766
# stdlib.c 767
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 768
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 100
mov_eax, %100
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_sscanf_else5
# stdlib.c 769
# stdlib.c 770
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
push_eax # v (local)
lea_eax,[ebp+DWORD] %24
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 772
:_sscanf_loop6
push_eax # 48
mov_eax, %48
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_sscanf_and_end7
pop_eax
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 57
mov_eax, %57
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_sscanf_and_end7
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_sscanf_else8
jmp %_sscanf_loop_end6
# stdlib.c 773
# stdlib.c 774
:_sscanf_else8 # no else
push_eax # v (local)
lea_eax,[ebp+DWORD] %24
push_eax # 10
mov_eax, %10
push_eax # v (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 775
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_sscanf_loop6
:_sscanf_loop_end6
# stdlib.c 777
push_eax # ap (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_eax,[eax] # ?
push_eax # v (local)
lea_eax,[ebp+DWORD] %24
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 778
push_eax # ap (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 4
mov_eax, %4
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 779
push_eax # args_parsed (local)
lea_eax,[ebp+DWORD] %20
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_sscanf_else_end5
:_sscanf_else5
# stdlib.c 782
# stdlib.c 783
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # 'sscanf: format %%%c not supported\n'
mov_eax, &string_9
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %24
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %24
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %28 # ()
call_eax
sub_ebp, %28
pop_eax # ;
# stdlib.c 784
push_eax # 1
mov_eax, %1
push_eax # exit (function)
mov_eax, &f_exit
add_ebp, %24 # ()
call_eax
sub_ebp, %24
pop_eax # ;
:_sscanf_else_end5
jmp %_sscanf_else_end4
:_sscanf_else4
# stdlib.c 788
# stdlib.c 789
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_sscanf_else9
# stdlib.c 790
jmp %_sscanf_loop_end1
# stdlib.c 791
:_sscanf_else9 # no else
push_eax # format (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stdlib.c 792
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
:_sscanf_else_end4
:_sscanf_else_end3
jmp %_sscanf_loop1
:_sscanf_loop_end1
# stdlib.c 794
push_eax # args_parsed (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_atoi
pop_eax
mov_[ebp],eax
pop_eax
push_eax # nptr (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 800
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # 'TODO atoi\n'
mov_eax, &string_10
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stdlib.c 800
push_eax # 1
mov_eax, %1
push_eax # exit (function)
mov_eax, &f_exit
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_remove
pop_eax
mov_[ebp],eax
pop_eax
push_eax # pathname (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 805
push_eax # 10
mov_eax, %10
push_eax # pathname (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %8 # ()
call_eax
sub_ebp, %8
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_execvp
pop_eax
mov_[ebp],eax
pop_eax
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # file (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 811
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
push_eax # 'TODO execvp\n'
mov_eax, &string_11
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
# stdlib.c 811
push_eax # 1
mov_eax, %1
push_eax # exit (function)
mov_eax, &f_exit
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_mkdir
pop_eax
mov_[ebp],eax
pop_eax
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # pathname (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 816
push_eax # 39
mov_eax, %39
push_eax # pathname (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %12 # ()
call_eax
sub_ebp, %12
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_chdir
pop_eax
mov_[ebp],eax
pop_eax
push_eax # path (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 821
push_eax # 12
mov_eax, %12
push_eax # path (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_access
pop_eax
mov_[ebp],eax
pop_eax
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # filename (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 826
push_eax # 33
mov_eax, %33
push_eax # filename (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %12 # ()
call_eax
sub_ebp, %12
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_chmod
pop_eax
mov_[ebp],eax
pop_eax
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # filename (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 831
push_eax # 15
mov_eax, %15
push_eax # filename (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # mode (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %12 # ()
call_eax
sub_ebp, %12
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_symlink
pop_eax
mov_[ebp],eax
pop_eax
push_eax # linkpath (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # target (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 836
push_eax # 83
mov_eax, %83
push_eax # target (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # linkpath (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %12 # ()
call_eax
sub_ebp, %12
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_uname
pop_eax
mov_[ebp],eax
pop_eax
push_eax # buf (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 854
push_eax # 109
mov_eax, %109
push_eax # buf (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
push_eax # 0
mov_eax, %0
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %8 # ()
call_eax
sub_ebp, %8
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_execve
pop_eax
mov_[ebp],eax
pop_eax
push_eax # env (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # argv (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # program (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 859
push_eax # 11
mov_eax, %11
push_eax # program (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # argv (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # env (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # sys_int80 (function)
mov_eax, &f_sys_int80
add_ebp, %16 # ()
call_eax
sub_ebp, %16
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_fgets
pop_eax
mov_[ebp],eax
pop_eax
push_eax # f (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # len (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stdlib.c 864
push_eax # f (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # feof (function)
mov_eax, &f_feof
add_ebp, %16 # ()
call_eax
sub_ebp, %16
test_eax,eax # if
pop_eax
je %_fgets_else1
# stdlib.c 865
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
# stdlib.c 867
:_fgets_else1 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_fgets_loop2
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # len (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fgets_else3
jmp %_fgets_loop_end2
# stdlib.c 868
:_fgets_else3 # no else
push_eax # ch (local)
lea_eax,[ebp+DWORD] %20
push_eax # f (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # fgetc (function)
mov_eax, &f_fgetc
add_ebp, %24 # ()
call_eax
sub_ebp, %24
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stdlib.c 870
push_eax # ch (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fgets_else4
# stdlib.c 871
# stdlib.c 872
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 873
jmp %_fgets_loop_end2
# stdlib.c 875
:_fgets_else4 # no else
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # ch (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 876
push_eax # ch (local)
lea_eax,[ebp+DWORD] %20
mov_eax,[eax] # ?
push_eax # 10
mov_eax, %10
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_fgets_else5
# stdlib.c 877
# stdlib.c 878
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stdlib.c 879
jmp %_fgets_loop_end2
:_fgets_else5 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_fgets_loop2
:_fgets_loop_end2
# stdlib.c 882
push_eax # str (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_read_char
pop_eax
mov_[ebp],eax
pop_eax
# stack_c.c 54
push_eax # fin (global)
mov_eax, &g_fin
mov_eax,[eax] # ?
push_eax # feof (function)
mov_eax, &f_feof
add_ebp, %4 # ()
call_eax
sub_ebp, %4
test_eax,eax # if
pop_eax
je %_read_char_else1
# stack_c.c 55
push_eax # cur_char (global)
mov_eax, &g_cur_char
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %_read_char_else_end1
:_read_char_else1
# stack_c.c 57
# stack_c.c 58
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 10
mov_eax, %10
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_read_char_else2
# stack_c.c 59
# stack_c.c 60
push_eax # cur_char_line (global)
mov_eax, &g_cur_char_line
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stack_c.c 61
push_eax # cur_char_column (global)
mov_eax, &g_cur_char_column
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 63
:_read_char_else2 # no else
push_eax # cur_char (global)
mov_eax, &g_cur_char
push_eax # fin (global)
mov_eax, &g_fin
mov_eax,[eax] # ?
push_eax # fgetc (function)
mov_eax, &f_fgetc
add_ebp, %4 # ()
call_eax
sub_ebp, %4
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 64
push_eax # fin (global)
mov_eax, &g_fin
mov_eax,[eax] # ?
push_eax # feof (function)
mov_eax, &f_feof
add_ebp, %4 # ()
call_eax
sub_ebp, %4
test_eax,eax # if
pop_eax
je %_read_char_else3
# stack_c.c 65
push_eax # cur_char (global)
mov_eax, &g_cur_char
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %_read_char_else_end3
:_read_char_else3
# stack_c.c 67
# stack_c.c 68
push_eax # cur_char_column (global)
mov_eax, &g_cur_char_column
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stack_c.c 69
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 9
mov_eax, %9
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_read_char_else4
# stack_c.c 70
push_eax # cur_char_column (global)
mov_eax, &g_cur_char_column
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
push_eax # cur_char_column (global)
mov_eax, &g_cur_char_column
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # 4
mov_eax, %4
mov_ebx,eax # %s
pop_eax
cdq
idiv_ebx
mov_eax,edx pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_read_char_else4 # no else
:_read_char_else_end3
:_read_char_else_end1
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_get_token
pop_eax
mov_[ebp],eax
pop_eax
# stack_c.c 159
push_eax # token_len (global)
mov_eax, &g_token_len
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 161
:_get_token_loop1
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end2
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 32
mov_eax, %32
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end2
test_eax,eax # ||
jne %_get_token_or_end3
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 35
mov_eax, %35
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_get_token_or_end3
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else4
jmp %_get_token_loop_end1
# stack_c.c 162
# stack_c.c 163
:_get_token_else4 # no else
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 35
mov_eax, %35
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else5
# stack_c.c 164
# stack_c.c 165
:_get_token_loop6
# stack_c.c 166
# stack_c.c 167
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # fputc (function)
mov_eax, &f_fputc
add_ebp, %4 # ()
call_eax
sub_ebp, %4
pop_eax # ;
# stack_c.c 168
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %4 # ()
call_eax
sub_ebp, %4
pop_eax # ;
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end7
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 10
mov_eax, %10
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
:_get_token_and_end7
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else8
jmp %_get_token_loop_end6
:_get_token_else8 # no else
jmp %_get_token_loop6
:_get_token_loop_end6
# stack_c.c 171
push_eax # 10
mov_eax, %10
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # fputc (function)
mov_eax, &f_fputc
add_ebp, %4 # ()
call_eax
sub_ebp, %4
pop_eax # ;
jmp %_get_token_else_end5
:_get_token_else5
# stack_c.c 174
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %4 # ()
call_eax
sub_ebp, %4
pop_eax # ;
:_get_token_else_end5
jmp %_get_token_loop1
:_get_token_loop_end1
# stack_c.c 178
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else9
# stack_c.c 179
# stack_c.c 180
push_eax # sym (global)
mov_eax, &g_sym
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 181
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 185
:_get_token_else9 # no else
push_eax # cur_line (global)
mov_eax, &g_cur_line
push_eax # cur_char_line (global)
mov_eax, &g_cur_char_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 186
push_eax # cur_column (global)
mov_eax, &g_cur_column
push_eax # cur_char_column (global)
mov_eax, &g_cur_char_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 189
push_eax # 97
mov_eax, %97
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end10
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 122
mov_eax, %122
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end10
test_eax,eax # ||
jne %_get_token_or_end11
pop_eax
push_eax # 65
mov_eax, %65
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end12
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 90
mov_eax, %90
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end12
:_get_token_or_end11
test_eax,eax # ||
jne %_get_token_or_end13
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 95
mov_eax, %95
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_get_token_or_end13
test_eax,eax # if
pop_eax
je %_get_token_else14
# stack_c.c 190
# stack_c.c 191
push_eax # sym (global)
mov_eax, &g_sym
push_eax # 65
mov_eax, %65
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 192
:_get_token_loop15
# stack_c.c 193
# stack_c.c 194
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # +
add_eax,ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 195
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %4 # ()
call_eax
sub_ebp, %4
pop_eax # ;
push_eax # 97
mov_eax, %97
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end16
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 122
mov_eax, %122
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end16
test_eax,eax # ||
jne %_get_token_or_end17
pop_eax
push_eax # 65
mov_eax, %65
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end18
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 90
mov_eax, %90
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end18
:_get_token_or_end17
test_eax,eax # ||
jne %_get_token_or_end19
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 95
mov_eax, %95
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_get_token_or_end19
test_eax,eax # ||
jne %_get_token_or_end20
pop_eax
push_eax # 48
mov_eax, %48
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end21
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 57
mov_eax, %57
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end21
:_get_token_or_end20
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else22
jmp %_get_token_loop_end15
:_get_token_else22 # no else
jmp %_get_token_loop15
:_get_token_loop_end15
# stack_c.c 198
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 200
push_eax # token_len (global)
mov_eax, &g_token_len
mov_eax,[eax] # ?
push_eax # 50
mov_eax, %50
pop_ebx # >s
cmp_eax_ebx
setg_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else23
# stack_c.c 201
# stack_c.c 202
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d: Variable '%s' is longer than %d characters\n'
mov_eax, &string_12
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # 50
mov_eax, %50
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %4
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_eax # ;
# stack_c.c 203
push_eax # error (global)
mov_eax, &g_error
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 204
push_eax # sym (global)
mov_eax, &g_sym
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 205
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 209
:_get_token_else23 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %4
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_get_token_loop24
push_eax # i (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 12
mov_eax, %12
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else25
jmp %_get_token_loop_end24
# stack_c.c 210
:_get_token_else25 # no else
push_eax # keywords (global)
mov_eax, &g_keywords
push_eax # i (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 8
mov_eax, %8
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s6_m_name)
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
push_eax # token (global)
mov_eax, &g_token
push_eax # strcmp (function)
mov_eax, &f_strcmp
add_ebp, %8 # ()
call_eax
sub_ebp, %8
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else26
# stack_c.c 211
# stack_c.c 212
push_eax # sym (global)
mov_eax, &g_sym
push_eax # keywords (global)
mov_eax, &g_keywords
push_eax # i (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 8
mov_eax, %8
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 4 (const s6_m_sym)
mov_eax, %4
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 213
jmp %_get_token_loop_end24
:_get_token_else26 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_get_token_loop24
:_get_token_loop_end24
# stack_c.c 215
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 219
:_get_token_else14 # no else
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 39
mov_eax, %39
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # ||
jne %_get_token_or_end27
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 34
mov_eax, %34
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_get_token_or_end27
test_eax,eax # if
pop_eax
je %_get_token_else28
# stack_c.c 220
# stack_c.c 221
push_eax # sym (global)
mov_eax, &g_sym
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # quote (local)
lea_eax,[ebp+DWORD] %4
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 223
:_get_token_loop29
# stack_c.c 224
# stack_c.c 225
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stack_c.c 226
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else30
# stack_c.c 227
jmp %_get_token_loop_end29
# stack_c.c 228
:_get_token_else30 # no else
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # quote (local)
lea_eax,[ebp+DWORD] %4
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else31
# stack_c.c 229
# stack_c.c 230
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stack_c.c 231
jmp %_get_token_loop_end29
# stack_c.c 233
:_get_token_else31 # no else
push_eax # token_len (global)
mov_eax, &g_token_len
mov_eax,[eax] # ?
push_eax # 8000
mov_eax, %8000
pop_ebx # >s
cmp_eax_ebx
setg_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else32
# stack_c.c 234
# stack_c.c 235
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d: String longer than %d characters\n'
mov_eax, &string_13
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %8
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %8
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 8000
mov_eax, %8000
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %8
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_eax # ;
# stack_c.c 236
push_eax # error (global)
mov_eax, &g_error
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 237
push_eax # sym (global)
mov_eax, &g_sym
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 238
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 240
:_get_token_else32 # no else
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 92
mov_eax, %92
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else33
# stack_c.c 241
# stack_c.c 242
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stack_c.c 243
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 48
mov_eax, %48
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else34
# stack_c.c 244
push_eax # cur_char (global)
mov_eax, &g_cur_char
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %_get_token_else_end34
:_get_token_else34
# stack_c.c 245
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 110
mov_eax, %110
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else35
# stack_c.c 246
push_eax # cur_char (global)
mov_eax, &g_cur_char
push_eax # 10
mov_eax, %10
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %_get_token_else_end35
:_get_token_else35
# stack_c.c 247
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 114
mov_eax, %114
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else36
# stack_c.c 248
push_eax # cur_char (global)
mov_eax, &g_cur_char
push_eax # 13
mov_eax, %13
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %_get_token_else_end36
:_get_token_else36
# stack_c.c 249
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 116
mov_eax, %116
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else37
# stack_c.c 250
push_eax # cur_char (global)
mov_eax, &g_cur_char
push_eax # 9
mov_eax, %9
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %_get_token_else_end37
:_get_token_else37
# stack_c.c 251
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 120
mov_eax, %120
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else38
# stack_c.c 252
# stack_c.c 253
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
push_eax # v (local)
lea_eax,[ebp+DWORD] %8
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 255
push_eax # 48
mov_eax, %48
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end39
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 57
mov_eax, %57
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end39
test_eax,eax # if
pop_eax
je %_get_token_else40
# stack_c.c 256
push_eax # v (local)
lea_eax,[ebp+DWORD] %8
push_eax # 16
mov_eax, %16
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 48
mov_eax, %48
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # *
mul_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_get_token_else_end40
:_get_token_else40
# stack_c.c 257
push_eax # 65
mov_eax, %65
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end41
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 70
mov_eax, %70
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end41
test_eax,eax # if
pop_eax
je %_get_token_else42
# stack_c.c 258
push_eax # v (local)
lea_eax,[ebp+DWORD] %8
push_eax # 16
mov_eax, %16
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # +
add_eax,ebx
pop_ebx # *
mul_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_get_token_else_end42
:_get_token_else42
# stack_c.c 259
push_eax # 97
mov_eax, %97
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end43
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 102
mov_eax, %102
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end43
test_eax,eax # if
pop_eax
je %_get_token_else44
# stack_c.c 260
push_eax # v (local)
lea_eax,[ebp+DWORD] %8
push_eax # 16
mov_eax, %16
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # +
add_eax,ebx
pop_ebx # *
mul_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_get_token_else_end44
:_get_token_else44
# stack_c.c 262
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Illegal character '%c' after \\x\n'
mov_eax, &string_14
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %24 # ()
call_eax
sub_ebp, %24
pop_eax # ;
:_get_token_else_end44
:_get_token_else_end42
:_get_token_else_end40
# stack_c.c 263
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
# stack_c.c 264
push_eax # 48
mov_eax, %48
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end45
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 57
mov_eax, %57
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end45
test_eax,eax # if
pop_eax
je %_get_token_else46
# stack_c.c 265
push_eax # v (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 48
mov_eax, %48
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_get_token_else_end46
:_get_token_else46
# stack_c.c 266
push_eax # 65
mov_eax, %65
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end47
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 70
mov_eax, %70
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end47
test_eax,eax # if
pop_eax
je %_get_token_else48
# stack_c.c 267
push_eax # v (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # +
add_eax,ebx
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_get_token_else_end48
:_get_token_else48
# stack_c.c 268
push_eax # 97
mov_eax, %97
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end49
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 102
mov_eax, %102
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end49
test_eax,eax # if
pop_eax
je %_get_token_else50
# stack_c.c 269
push_eax # v (local)
lea_eax,[ebp+DWORD] %8
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # +
add_eax,ebx
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_get_token_else_end50
:_get_token_else50
# stack_c.c 271
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Illegal character '%c' after \\x\n'
mov_eax, &string_14
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %24 # ()
call_eax
sub_ebp, %24
pop_eax # ;
:_get_token_else_end50
:_get_token_else_end48
:_get_token_else_end46
# stack_c.c 272
push_eax # cur_char (global)
mov_eax, &g_cur_char
push_eax # v (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
:_get_token_else38 # no else
:_get_token_else_end37
:_get_token_else_end36
:_get_token_else_end35
:_get_token_else_end34
# stack_c.c 274
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # +
add_eax,ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %_get_token_else_end33
:_get_token_else33
# stack_c.c 277
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # +
add_eax,ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
:_get_token_else_end33
jmp %_get_token_loop29
:_get_token_loop_end29
# stack_c.c 279
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 280
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 284
:_get_token_else28 # no else
push_eax # 48
mov_eax, %48
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end51
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 57
mov_eax, %57
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end51
test_eax,eax # ||
jne %_get_token_or_end52
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 45
mov_eax, %45
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_get_token_or_end52
test_eax,eax # if
pop_eax
je %_get_token_else53
# stack_c.c 285
# stack_c.c 286
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # +
add_eax,ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # sign (local)
lea_eax,[ebp+DWORD] %4
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 288
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 45
mov_eax, %45
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else54
# stack_c.c 289
# stack_c.c 290
push_eax # sign (local)
lea_eax,[ebp+DWORD] %4
push_eax # 4294967295
mov_eax, %4294967295
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 291
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stack_c.c 293
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 62
mov_eax, %62
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else55
# stack_c.c 294
# stack_c.c 295
push_eax # sym (global)
mov_eax, &g_sym
push_eax # 97
mov_eax, %97
push_eax # 20
mov_eax, %20
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 296
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # +
add_eax,ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 297
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 298
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stack_c.c 299
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 301
:_get_token_else55 # no else
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 112
mov_eax, %112
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else56
# stack_c.c 302
# stack_c.c 303
push_eax # sym (global)
mov_eax, &g_sym
push_eax # 97
mov_eax, %97
push_eax # 22
mov_eax, %22
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 304
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # +
add_eax,ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 305
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 306
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stack_c.c 307
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 309
:_get_token_else56 # no else
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 32
mov_eax, %32
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else57
# stack_c.c 310
# stack_c.c 311
push_eax # sym (global)
mov_eax, &g_sym
push_eax # 45
mov_eax, %45
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 312
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 313
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:_get_token_else57 # no else
# stack_c.c 317
:_get_token_else54 # no else
push_eax # 48
mov_eax, %48
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end58
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 57
mov_eax, %57
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end58
test_eax,eax # if
pop_eax
je %_get_token_else59
# stack_c.c 318
# stack_c.c 319
push_eax # sym (global)
mov_eax, &g_sym
push_eax # 48
mov_eax, %48
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 320
push_eax # int_value (global)
mov_eax, &g_int_value
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 321
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 48
mov_eax, %48
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else60
# stack_c.c 322
# stack_c.c 323
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stack_c.c 324
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 120
mov_eax, %120
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else61
# stack_c.c 325
# stack_c.c 326
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stack_c.c 328
:_get_token_loop62
push_eax # 1
mov_eax, %1
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else63
jmp %_get_token_loop_end62
# stack_c.c 329
# stack_c.c 330
:_get_token_else63 # no else
push_eax # 48
mov_eax, %48
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end64
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 57
mov_eax, %57
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end64
test_eax,eax # if
pop_eax
je %_get_token_else65
# stack_c.c 331
push_eax # int_value (global)
mov_eax, &g_int_value
push_eax # 16
mov_eax, %16
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_get_token_else_end65
:_get_token_else65
# stack_c.c 332
push_eax # 97
mov_eax, %97
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end66
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 102
mov_eax, %102
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end66
test_eax,eax # if
pop_eax
je %_get_token_else67
# stack_c.c 333
push_eax # int_value (global)
mov_eax, &g_int_value
push_eax # 16
mov_eax, %16
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_get_token_else_end67
:_get_token_else67
# stack_c.c 334
push_eax # 65
mov_eax, %65
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end68
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 70
mov_eax, %70
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end68
test_eax,eax # if
pop_eax
je %_get_token_else69
# stack_c.c 335
push_eax # int_value (global)
mov_eax, &g_int_value
push_eax # 16
mov_eax, %16
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # +
add_eax,ebx
push_eax # 65
mov_eax, %65
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
jmp %_get_token_else_end69
:_get_token_else69
# stack_c.c 337
jmp %_get_token_loop_end62
:_get_token_else_end69
:_get_token_else_end67
:_get_token_else_end65
# stack_c.c 338
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
jmp %_get_token_loop62
:_get_token_loop_end62
jmp %_get_token_else_end61
:_get_token_else61
# stack_c.c 342
# stack_c.c 344
:_get_token_loop70
push_eax # 48
mov_eax, %48
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end71
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 55
mov_eax, %55
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end71
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else72
jmp %_get_token_loop_end70
# stack_c.c 345
# stack_c.c 346
:_get_token_else72 # no else
push_eax # int_value (global)
mov_eax, &g_int_value
push_eax # 8
mov_eax, %8
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 347
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
jmp %_get_token_loop70
:_get_token_loop_end70
:_get_token_else_end61
jmp %_get_token_else_end60
:_get_token_else60
# stack_c.c 352
# stack_c.c 354
:_get_token_loop73
push_eax # 48
mov_eax, %48
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
test_eax,eax # &&
je %_get_token_and_end74
pop_eax
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 57
mov_eax, %57
pop_ebx # <=s
cmp_eax_ebx
setle_al
movzx_eax,al
:_get_token_and_end74
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else75
jmp %_get_token_loop_end73
# stack_c.c 355
# stack_c.c 356
:_get_token_else75 # no else
push_eax # int_value (global)
mov_eax, &g_int_value
push_eax # 10
mov_eax, %10
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # +
add_eax,ebx
push_eax # 48
mov_eax, %48
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 357
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
jmp %_get_token_loop73
:_get_token_loop_end73
:_get_token_else_end60
# stack_c.c 360
push_eax # int_value (global)
mov_eax, &g_int_value
push_eax # sign (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 361
push_eax # token (global)
mov_eax, &g_token
push_eax # '%d'
mov_eax, &string_15
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %8
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %8
push_eax # sprintf (function)
mov_eax, &f_sprintf
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
# stack_c.c 362
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:_get_token_else59 # no else
# stack_c.c 367
:_get_token_else53 # no else
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 58
mov_eax, %58
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else76
# stack_c.c 368
# stack_c.c 369
push_eax # sym (global)
mov_eax, &g_sym
push_eax # 58
mov_eax, %58
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 370
push_eax # token (global)
mov_eax, &g_token
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 371
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %4 # ()
call_eax
sub_ebp, %4
pop_eax # ;
# stack_c.c 372
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 376
:_get_token_else76 # no else
push_eax # sym (global)
mov_eax, &g_sym
push_eax # 32
mov_eax, %32
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 377
:_get_token_loop77
# stack_c.c 378
# stack_c.c 379
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # +
add_eax,ebx
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 380
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %4 # ()
call_eax
sub_ebp, %4
pop_eax # ;
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 32
mov_eax, %32
pop_ebx # >s
cmp_eax_ebx
setg_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else78
jmp %_get_token_loop_end77
:_get_token_else78 # no else
jmp %_get_token_loop77
:_get_token_loop_end77
# stack_c.c 384
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 385
push_eax # token_len (global)
mov_eax, &g_token_len
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else79
# stack_c.c 386
push_eax # sym (global)
mov_eax, &g_sym
push_eax # token (global)
mov_eax, &g_token
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
jmp %_get_token_else_end79
:_get_token_else79
# stack_c.c 388
push_eax # i (local)
lea_eax,[ebp+DWORD] %4
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_get_token_loop80
push_eax # i (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 23
mov_eax, %23
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else81
jmp %_get_token_loop_end80
# stack_c.c 389
:_get_token_else81 # no else
push_eax # token (global)
mov_eax, &g_token
push_eax # symbols (global)
mov_eax, &g_symbols
push_eax # i (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 8
mov_eax, %8
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s6_m_name)
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
push_eax # strcmp (function)
mov_eax, &f_strcmp
add_ebp, %8 # ()
call_eax
sub_ebp, %8
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_get_token_else82
# stack_c.c 390
# stack_c.c 391
push_eax # sym (global)
mov_eax, &g_sym
push_eax # symbols (global)
mov_eax, &g_symbols
push_eax # i (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 8
mov_eax, %8
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 4 (const s6_m_sym)
mov_eax, %4
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 392
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:_get_token_else82 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_get_token_loop80
:_get_token_loop_end80
:_get_token_else_end79
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_save_print_string
pop_eax
mov_[ebp],eax
pop_eax
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # fout (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stack_c.c 434
:_save_print_string_loop1
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_save_print_string_else2
jmp %_save_print_string_loop_end1
# stack_c.c 435
:_save_print_string_else2 # no else
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 10
mov_eax, %10
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_save_print_string_else3
# stack_c.c 436
push_eax # fout (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # '\\n'
mov_eax, &string_16
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
jmp %_save_print_string_else_end3
:_save_print_string_else3
# stack_c.c 437
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 9
mov_eax, %9
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_save_print_string_else4
# stack_c.c 438
push_eax # fout (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # '\\t'
mov_eax, &string_17
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
jmp %_save_print_string_else_end4
:_save_print_string_else4
# stack_c.c 439
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 92
mov_eax, %92
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # ||
jne %_save_print_string_or_end5
pop_eax
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 34
mov_eax, %34
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_save_print_string_or_end5
test_eax,eax # if
pop_eax
je %_save_print_string_else6
# stack_c.c 440
push_eax # fout (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # '\\%c'
mov_eax, &string_18
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_eax # ;
jmp %_save_print_string_else_end6
:_save_print_string_else6
# stack_c.c 441
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 32
mov_eax, %32
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_save_print_string_else7
# stack_c.c 442
push_eax # fout (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # '?'
mov_eax, &string_19
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %12 # ()
call_eax
sub_ebp, %12
pop_eax # ;
jmp %_save_print_string_else_end7
:_save_print_string_else7
# stack_c.c 444
push_eax # fout (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # '%c'
mov_eax, &string_20
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %12
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_eax # ;
:_save_print_string_else_end7
:_save_print_string_else_end6
:_save_print_string_else_end4
:_save_print_string_else_end3
push_eax # s (local)
lea_eax,[ebp+DWORD] %4
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_save_print_string_loop1
:_save_print_string_loop_end1
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_nr_for_string
pop_eax
mov_[ebp],eax
pop_eax
push_eax # length (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # nr (local)
lea_eax,[ebp+DWORD] %12
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
push_eax # strings (global)
mov_eax, &g_strings
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 452
:_nr_for_string_loop1
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_nr_for_string_else2
jmp %_nr_for_string_loop_end1
# stack_c.c 453
:_nr_for_string_else2 # no else
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_eax,[eax] # ->
add_eax, %4
mov_eax,[eax] # ?
push_eax # length (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # &&
je %_nr_for_string_and_end3
pop_eax
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # length (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # memcmp (function)
mov_eax, &f_memcmp
add_ebp, %20 # ()
call_eax
sub_ebp, %20
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_nr_for_string_and_end3
test_eax,eax # if
pop_eax
je %_nr_for_string_else4
# stack_c.c 454
push_eax # nr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
:_nr_for_string_else4 # no else
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_eax,[eax] # ->
add_eax, %8
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # nr (local)
lea_eax,[ebp+DWORD] %12
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_nr_for_string_loop1
:_nr_for_string_loop_end1
# stack_c.c 455
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 12
mov_eax, %12
push_eax # malloc (function)
mov_eax, &f_malloc
add_ebp, %20 # ()
call_eax
sub_ebp, %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 456
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_eax,[eax] # ->
add_eax, %0
push_eax # length (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
push_eax # malloc (function)
mov_eax, &f_malloc
add_ebp, %20 # ()
call_eax
sub_ebp, %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 457
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # s (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # length (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
push_eax # memcpy (function)
mov_eax, &f_memcpy
add_ebp, %20 # ()
call_eax
sub_ebp, %20
pop_eax # ;
# stack_c.c 458
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_eax,[eax] # ->
add_eax, %4
push_eax # length (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 459
push_eax # ref_string (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
mov_eax,[eax] # ->
add_eax, %8
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 460
push_eax # nr (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_add_function
pop_eax
mov_[ebp],eax
pop_eax
push_eax # name (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
# stack_c.c 472
push_eax # idents (global)
mov_eax, &g_idents
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s7_m_type)
mov_eax, %0
pop_ebx # +
add_eax,ebx
push_eax # 70
mov_eax, %70
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 473
push_eax # idents (global)
mov_eax, &g_idents
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 4 (const s7_m_name)
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # name (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # strcpy (function)
mov_eax, &f_strcpy
add_ebp, %8 # ()
call_eax
sub_ebp, %8
pop_eax # ;
# stack_c.c 474
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f_main
pop_eax
mov_[ebp],eax
pop_eax
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # argc (local)
lea_eax,[ebp+DWORD] %8
pop_ebx # =:
mov_[eax],ebx
pop_eax
push_eax # __init_globals__ (function)
mov_eax, &f___init_globals__
add_ebp, %12 # ()
call_eax
sub_ebp, %12
push_eax # _sys_env (global)
mov_eax, &g__sys_env
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # argc (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 479
push_eax # ferr (global)
mov_eax, &g_ferr
push_eax # stderr (global)
mov_eax, &g_stderr
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 480
push_eax # fout (global)
mov_eax, &g_fout
push_eax # stdout (global)
mov_eax, &g_stdout
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 481
push_eax # fin (global)
mov_eax, &g_fin
push_eax # stdin (global)
mov_eax, &g_stdin
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # fintro (local)
lea_eax,[ebp+DWORD] %12
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 484
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_loop1
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # argc (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else2
jmp %_main_loop_end1
# stack_c.c 485
:_main_else2 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
push_eax # argc (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # &&
je %_main_and_end3
pop_eax
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
push_eax # '-o'
mov_eax, &string_21
push_eax # strcmp (function)
mov_eax, &f_strcmp
add_ebp, %20 # ()
call_eax
sub_ebp, %20
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_main_and_end3
test_eax,eax # if
pop_eax
je %_main_else4
# stack_c.c 486
# stack_c.c 487
push_eax # fout (global)
mov_eax, &g_fout
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
push_eax # 'w'
mov_eax, &string_22
push_eax # fopen (function)
mov_eax, &f_fopen
add_ebp, %20 # ()
call_eax
sub_ebp, %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 488
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else5
# stack_c.c 489
# stack_c.c 490
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR: Cannot open file '%s' for writing\n'
mov_eax, &string_23
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %20
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %20
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %24 # ()
call_eax
sub_ebp, %24
pop_eax # ;
# stack_c.c 491
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
:_main_else5 # no else
jmp %_main_else_end4
:_main_else4
# stack_c.c 494
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
push_eax # argc (local)
lea_eax,[ebp+DWORD] %8
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # &&
je %_main_and_end6
pop_eax
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
push_eax # '-i'
mov_eax, &string_24
push_eax # strcmp (function)
mov_eax, &f_strcmp
add_ebp, %20 # ()
call_eax
sub_ebp, %20
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_main_and_end6
test_eax,eax # if
pop_eax
je %_main_else7
# stack_c.c 495
# stack_c.c 496
push_eax # fintro (local)
lea_eax,[ebp+DWORD] %12
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
push_eax # 'r'
mov_eax, &string_25
push_eax # fopen (function)
mov_eax, &f_fopen
add_ebp, %20 # ()
call_eax
sub_ebp, %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 497
push_eax # fintro (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else8
# stack_c.c 498
# stack_c.c 499
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR: Cannot open file '%s' for input\n'
mov_eax, &string_26
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %20
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %20
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %24 # ()
call_eax
sub_ebp, %24
pop_eax # ;
# stack_c.c 500
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
:_main_else8 # no else
jmp %_main_else_end7
:_main_else7
# stack_c.c 504
# stack_c.c 505
push_eax # fin (global)
mov_eax, &g_fin
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
push_eax # 'r'
mov_eax, &string_25
push_eax # fopen (function)
mov_eax, &f_fopen
add_ebp, %20 # ()
call_eax
sub_ebp, %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 506
push_eax # fin (global)
mov_eax, &g_fin
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else9
# stack_c.c 507
# stack_c.c 508
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR: Cannot open file '%s' for input\n'
mov_eax, &string_26
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %20
push_eax # argv (local)
lea_eax,[ebp+DWORD] %4
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %20
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %24 # ()
call_eax
sub_ebp, %24
pop_eax # ;
# stack_c.c 509
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
:_main_else9 # no else
:_main_else_end7
:_main_else_end4
push_eax # i (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_loop1
:_main_loop_end1
# stack_c.c 515
push_eax # 'sys_int80'
mov_eax, &string_27
push_eax # add_function (function)
mov_eax, &f_add_function
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_eax # ;
# stack_c.c 516
push_eax # 'sys_malloc'
mov_eax, &string_28
push_eax # add_function (function)
mov_eax, &f_add_function
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_eax # ;
# stack_c.c 519
push_eax # fintro (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else10
# stack_c.c 520
# stack_c.c 521
:_main_loop11
# stack_c.c 522
# stack_c.c 523
push_eax # cur_char (global)
mov_eax, &g_cur_char
push_eax # fintro (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # fgetc (function)
mov_eax, &f_fgetc
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 524
push_eax # fintro (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # feof (function)
mov_eax, &f_feof
add_ebp, %16 # ()
call_eax
sub_ebp, %16
test_eax,eax # if
pop_eax
je %_main_else12
# stack_c.c 525
jmp %_main_loop_end11
# stack_c.c 526
:_main_else12 # no else
push_eax # cur_char (global)
mov_eax, &g_cur_char
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # fputc (function)
mov_eax, &f_fputc
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_eax # ;
jmp %_main_loop11
:_main_loop_end11
# stack_c.c 528
push_eax # fintro (local)
lea_eax,[ebp+DWORD] %12
mov_eax,[eax] # ?
push_eax # fclose (function)
mov_eax, &f_fclose
add_ebp, %16 # ()
call_eax
sub_ebp, %16
pop_eax # ;
:_main_else10 # no else
# stack_c.c 535
push_eax # read_char (function)
mov_eax, &f_read_char
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 537
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 538
:_main_loop13
push_eax # 1
mov_eax, %1
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else14
jmp %_main_loop_end13
# stack_c.c 539
# stack_c.c 540
:_main_else14 # no else
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else15
# stack_c.c 541
jmp %_main_loop_end13
# stack_c.c 543
:_main_else15 # no else
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 70
mov_eax, %70
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else16
# stack_c.c 544
# stack_c.c 546
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 547
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else17
# stack_c.c 548
# stack_c.c 549
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Expecting name after 'void' for function\n'
mov_eax, &string_29
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 550
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 553
:_main_else17 # no else
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
push_eax # token (global)
mov_eax, &g_token
push_eax # strcpy (function)
mov_eax, &f_strcpy
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 555
push_eax # found (local)
lea_eax,[ebp+DWORD] %72
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 557
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_loop18
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else19
jmp %_main_loop_end18
# stack_c.c 558
:_main_else19 # no else
push_eax # token (global)
mov_eax, &g_token
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 4 (const s7_m_name)
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # strcmp (function)
mov_eax, &f_strcmp
add_ebp, %80 # ()
call_eax
sub_ebp, %80
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else20
# stack_c.c 559
# stack_c.c 560
push_eax # found (local)
lea_eax,[ebp+DWORD] %72
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 561
jmp %_main_loop_end18
:_main_else20 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_loop18
:_main_loop_end18
# stack_c.c 563
push_eax # found (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else21
# stack_c.c 564
# stack_c.c 565
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 4000
mov_eax, %4000
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else22
# stack_c.c 566
# stack_c.c 567
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: More than %d variables\n'
mov_eax, &string_30
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # 4000
mov_eax, %4000
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %88 # ()
call_eax
sub_ebp, %88
pop_eax # ;
# stack_c.c 568
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 570
:_main_else22 # no else
push_eax # token (global)
mov_eax, &g_token
push_eax # add_function (function)
mov_eax, &f_add_function
add_ebp, %76 # ()
call_eax
sub_ebp, %76
pop_eax # ;
:_main_else21 # no else
# stack_c.c 573
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 574
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 59
mov_eax, %59
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else23
# stack_c.c 575
jmp %_main_else_end23
:_main_else23
# stack_c.c 579
# stack_c.c 580
push_eax # pos (global)
mov_eax, &g_pos
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 581
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 123
mov_eax, %123
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else24
# stack_c.c 582
# stack_c.c 583
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Expect ; or { after function name\n'
mov_eax, &string_31
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 584
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 588
:_main_else24 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\n:f_%s\n\tpop_eax\n\tmov_[ebp],eax\n\tpop_eax\n'
mov_eax, &string_32
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %76 # ()
call_eax
sub_ebp, %76
pop_eax # ;
# stack_c.c 589
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 32
mov_eax, %32
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 590
push_eax # nesting_nr_vars (global)
mov_eax, &g_nesting_nr_vars
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 591
push_eax # nesting_pos (global)
mov_eax, &g_nesting_pos
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # pos (global)
mov_eax, &g_pos
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 592
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
# stack_c.c 593
push_eax # id (local)
lea_eax,[ebp+DWORD] %16
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_else_end23
jmp %_main_else_end16
:_main_else16
# stack_c.c 596
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 67
mov_eax, %67
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else25
# stack_c.c 597
# stack_c.c 599
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 600
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else26
# stack_c.c 601
# stack_c.c 602
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Expecting name after 'const'\n'
mov_eax, &string_33
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 603
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 605
:_main_else26 # no else
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 4000
mov_eax, %4000
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else27
# stack_c.c 606
# stack_c.c 607
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: More than %d variables\n'
mov_eax, &string_30
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # 4000
mov_eax, %4000
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 608
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 610
:_main_else27 # no else
push_eax # idents (global)
mov_eax, &g_idents
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s7_m_type)
mov_eax, %0
pop_ebx # +
add_eax,ebx
push_eax # 67
mov_eax, %67
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 611
push_eax # idents (global)
mov_eax, &g_idents
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 4 (const s7_m_name)
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
push_eax # strcpy (function)
mov_eax, &f_strcpy
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 612
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 613
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 48
mov_eax, %48
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else28
# stack_c.c 614
# stack_c.c 615
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Expecting number after 'const' <name>\n'
mov_eax, &string_34
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 616
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 618
:_main_else28 # no else
push_eax # idents (global)
mov_eax, &g_idents
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 64 (const s7_m_value)
mov_eax, %64
pop_ebx # +
add_eax,ebx
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 619
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_else_end25
:_main_else25
# stack_c.c 621
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 86
mov_eax, %86
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # ||
jne %_main_or_end29
pop_eax
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 83
mov_eax, %83
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_main_or_end29
test_eax,eax # if
pop_eax
je %_main_else30
# stack_c.c 622
push_eax # type (local)
lea_eax,[ebp+DWORD] %72
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 83
mov_eax, %83
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else31
push_eax # 83
mov_eax, %83
jmp %_main_else_end31
:_main_else31
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else32
push_eax # 71
mov_eax, %71
jmp %_main_else_end32
:_main_else32
push_eax # 76
mov_eax, %76
:_main_else_end32
:_main_else_end31
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 625
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %76 # ()
call_eax
sub_ebp, %76
pop_eax # ;
push_eax # size (local)
lea_eax,[ebp+DWORD] %76
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 627
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 48
mov_eax, %48
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else33
# stack_c.c 628
# stack_c.c 629
push_eax # size (local)
lea_eax,[ebp+DWORD] %76
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 630
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 632
:_main_else33 # no else
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else34
# stack_c.c 633
# stack_c.c 634
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Expecting name after 'int'\n'
mov_eax, &string_35
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %88 # ()
call_eax
sub_ebp, %88
pop_eax # ;
# stack_c.c 635
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 637
:_main_else34 # no else
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 4000
mov_eax, %4000
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else35
# stack_c.c 638
# stack_c.c 639
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: More than %d variables\n'
mov_eax, &string_30
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # 4000
mov_eax, %4000
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %92 # ()
call_eax
sub_ebp, %92
pop_eax # ;
# stack_c.c 640
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 642
:_main_else35 # no else
push_eax # nr_statics (global)
mov_eax, &g_nr_statics
mov_eax,[eax] # ?
push_eax # 10
mov_eax, %10
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else36
# stack_c.c 643
# stack_c.c 644
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: More than %d variables\n'
mov_eax, &string_30
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # 10
mov_eax, %10
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %92 # ()
call_eax
sub_ebp, %92
pop_eax # ;
# stack_c.c 645
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 647
:_main_else36 # no else
push_eax # idents (global)
mov_eax, &g_idents
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s7_m_type)
mov_eax, %0
pop_ebx # +
add_eax,ebx
push_eax # type (local)
lea_eax,[ebp+DWORD] %72
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 648
push_eax # idents (global)
mov_eax, &g_idents
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 4 (const s7_m_name)
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
push_eax # strcpy (function)
mov_eax, &f_strcpy
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 649
push_eax # idents (global)
mov_eax, &g_idents
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 60 (const s7_m_size)
mov_eax, %60
pop_ebx # +
add_eax,ebx
push_eax # size (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 650
push_eax # type (local)
lea_eax,[ebp+DWORD] %72
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 83
mov_eax, %83
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else37
# stack_c.c 651
# stack_c.c 652
push_eax # statics (global)
mov_eax, &g_statics
push_eax # nr_statics (global)
mov_eax, &g_nr_statics
mov_eax,[eax] # ?
push_eax # 56
mov_eax, %56
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s8_m_name)
mov_eax, %0
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
push_eax # strcpy (function)
mov_eax, &f_strcpy
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 653
push_eax # statics (global)
mov_eax, &g_statics
push_eax # nr_statics (global)
mov_eax, &g_nr_statics
mov_eax,[eax] # ?
push_eax # 56
mov_eax, %56
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 52 (const s8_m_size)
mov_eax, %52
pop_ebx # +
add_eax,ebx
push_eax # size (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 654
push_eax # idents (global)
mov_eax, &g_idents
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 64 (const s7_m_value)
mov_eax, %64
pop_ebx # +
add_eax,ebx
push_eax # nr_statics (global)
mov_eax, &g_nr_statics
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 655
push_eax # nr_statics (global)
mov_eax, &g_nr_statics
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_else_end37
:_main_else37
# stack_c.c 657
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >s
cmp_eax_ebx
setg_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else38
# stack_c.c 658
# stack_c.c 659
push_eax # idents (global)
mov_eax, &g_idents
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 56 (const s7_m_pos)
mov_eax, %56
pop_ebx # +
add_eax,ebx
push_eax # pos (global)
mov_eax, &g_pos
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 660
push_eax # pos (global)
mov_eax, &g_pos
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # size (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_else38 # no else
:_main_else_end37
# stack_c.c 662
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_else_end30
:_main_else30
# stack_c.c 664
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 76
mov_eax, %76
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else39
# stack_c.c 665
# stack_c.c 666
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 667
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 123
mov_eax, %123
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else40
# stack_c.c 668
# stack_c.c 669
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: expecting '{' after 'do'\n'
mov_eax, &string_36
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 670
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 672
:_main_else40 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':_%s_loop%d\n'
mov_eax, &string_37
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # id (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 673
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 100
mov_eax, %100
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else41
# stack_c.c 674
# stack_c.c 675
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Nesting deeper than %d\n'
mov_eax, &string_38
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # 100
mov_eax, %100
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 676
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 678
:_main_else41 # no else
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 76
mov_eax, %76
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 679
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # id (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 680
push_eax # nesting_nr_vars (global)
mov_eax, &g_nesting_nr_vars
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 681
push_eax # nesting_pos (global)
mov_eax, &g_nesting_pos
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # pos (global)
mov_eax, &g_pos
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 682
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_else_end39
:_main_else39
# stack_c.c 684
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 66
mov_eax, %66
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # ||
jne %_main_or_end42
pop_eax
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 68
mov_eax, %68
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_main_or_end42
test_eax,eax # if
pop_eax
je %_main_else43
# stack_c.c 685
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 687
:_main_loop44
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else45
jmp %_main_loop_end44
# stack_c.c 688
:_main_else45 # no else
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 76
mov_eax, %76
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else46
# stack_c.c 689
jmp %_main_loop_end44
:_main_else46 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_eax # ;
jmp %_main_loop44
:_main_loop_end44
# stack_c.c 690
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else47
# stack_c.c 691
# stack_c.c 692
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: 'break' outside 'loop'\n'
mov_eax, &string_39
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 693
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 695
:_main_else47 # no else
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 66
mov_eax, %66
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else48
# stack_c.c 696
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tjmp %%_%s_loop_end%d\n'
mov_eax, &string_40
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
jmp %_main_else_end48
:_main_else48
# stack_c.c 698
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tjmp %%_%s_loop%d\n'
mov_eax, &string_41
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
:_main_else_end48
jmp %_main_else_end43
:_main_else43
# stack_c.c 700
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 73
mov_eax, %73
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else49
# stack_c.c 701
# stack_c.c 702
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 703
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 123
mov_eax, %123
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else50
# stack_c.c 704
# stack_c.c 705
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: expecting '{' after 'if'\n'
mov_eax, &string_42
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 706
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 708
:_main_else50 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\ttest_eax,eax # if\n\tpop_eax\n\tje %%_%s_else%d\n'
mov_eax, &string_43
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # id (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 709
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 100
mov_eax, %100
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else51
# stack_c.c 710
# stack_c.c 711
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Nesting deeper than %d\n'
mov_eax, &string_38
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # 100
mov_eax, %100
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 712
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 714
:_main_else51 # no else
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 73
mov_eax, %73
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 715
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # id (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 716
push_eax # nesting_nr_vars (global)
mov_eax, &g_nesting_nr_vars
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 717
push_eax # nesting_pos (global)
mov_eax, &g_nesting_pos
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # pos (global)
mov_eax, &g_pos
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 718
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_else_end49
:_main_else49
# stack_c.c 720
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 69
mov_eax, %69
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else52
# stack_c.c 721
# stack_c.c 722
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: unexpected 'else'\n'
mov_eax, &string_44
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 723
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
jmp %_main_else_end52
:_main_else52
# stack_c.c 725
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 123
mov_eax, %123
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else53
# stack_c.c 726
# stack_c.c 727
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 32
mov_eax, %32
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 728
push_eax # nesting_nr_vars (global)
mov_eax, &g_nesting_nr_vars
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 729
push_eax # nesting_pos (global)
mov_eax, &g_nesting_pos
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # pos (global)
mov_eax, &g_pos
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 730
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_else_end53
:_main_else53
# stack_c.c 732
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 125
mov_eax, %125
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else54
# stack_c.c 733
# stack_c.c 734
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else55
# stack_c.c 735
# stack_c.c 736
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: To many }\n'
mov_eax, &string_45
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 737
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 739
:_main_else55 # no else
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_eax # ;
# stack_c.c 740
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
push_eax # nesting_nr_vars (global)
mov_eax, &g_nesting_nr_vars
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 741
push_eax # pos (global)
mov_eax, &g_pos
push_eax # nesting_pos (global)
mov_eax, &g_nesting_pos
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 742
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 76
mov_eax, %76
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else56
# stack_c.c 743
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tjmp %%_%s_loop%d\n:_%s_loop_end%d\n'
mov_eax, &string_46
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 12
mov_eax, %12
pop_ebx # +
add_eax,ebx
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %88 # ()
call_eax
sub_ebp, %88
pop_eax # ;
jmp %_main_else_end56
:_main_else56
# stack_c.c 744
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 73
mov_eax, %73
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else57
# stack_c.c 745
# stack_c.c 746
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 747
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 69
mov_eax, %69
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else58
# stack_c.c 748
# stack_c.c 749
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 750
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 123
mov_eax, %123
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else59
# stack_c.c 751
# stack_c.c 752
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: expecting '{' after 'else'\n'
mov_eax, &string_47
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 753
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 755
:_main_else59 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tjmp %%_%s_else_end%d\n'
mov_eax, &string_48
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 756
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':_%s_else%d\n'
mov_eax, &string_49
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 757
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 100
mov_eax, %100
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else60
# stack_c.c 758
# stack_c.c 759
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Nesting deeper than %d\n'
mov_eax, &string_38
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # 100
mov_eax, %100
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 760
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 762
:_main_else60 # no else
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 69
mov_eax, %69
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 763
push_eax # nesting_nr_vars (global)
mov_eax, &g_nesting_nr_vars
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 764
push_eax # nesting_pos (global)
mov_eax, &g_nesting_pos
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # pos (global)
mov_eax, &g_pos
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 765
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_else_end58
:_main_else58
# stack_c.c 768
# stack_c.c 769
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':_%s_else%d # no else\n'
mov_eax, &string_50
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 770
jmp %_main_loop13
:_main_else_end58
jmp %_main_else_end57
:_main_else57
# stack_c.c 773
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 69
mov_eax, %69
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else61
# stack_c.c 774
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':_%s_else_end%d\n'
mov_eax, &string_51
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
jmp %_main_else_end61
:_main_else61
# stack_c.c 775
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else62
# stack_c.c 776
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':_%s_and_end%d\n'
mov_eax, &string_52
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
jmp %_main_else_end62
:_main_else62
# stack_c.c 777
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 79
mov_eax, %79
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else63
# stack_c.c 778
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':_%s_or_end%d\n'
mov_eax, &string_53
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
:_main_else63 # no else
:_main_else_end62
:_main_else_end61
:_main_else_end57
:_main_else_end56
jmp %_main_else_end54
:_main_else54
# stack_c.c 780
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 82
mov_eax, %82
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else64
# stack_c.c 781
# stack_c.c 782
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_ebx,[ebp] # return\n\tpush_ebx\n\tret\n'
mov_eax, &string_54
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end64
:_main_else64
# stack_c.c 784
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 59
mov_eax, %59
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else65
# stack_c.c 785
# stack_c.c 786
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_eax # ;\n'
mov_eax, &string_55
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end65
:_main_else65
# stack_c.c 788
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 36
mov_eax, %36
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else66
# stack_c.c 789
# stack_c.c 790
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpush_eax # $ (dup)\n'
mov_eax, &string_56
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end66
:_main_else66
# stack_c.c 792
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 71
mov_eax, %71
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else67
# stack_c.c 793
# stack_c.c 794
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 795
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else68
# stack_c.c 796
# stack_c.c 797
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Expecting label after 'goto'\n'
mov_eax, &string_57
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 798
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 800
:_main_else68 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tjmp %%l_%s_%s\n'
mov_eax, &string_58
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
jmp %_main_else_end67
:_main_else67
# stack_c.c 802
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else69
# stack_c.c 803
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 805
:_main_loop70
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else71
jmp %_main_loop_end70
# stack_c.c 806
:_main_else71 # no else
push_eax # token (global)
mov_eax, &g_token
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 4 (const s7_m_name)
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # strcmp (function)
mov_eax, &f_strcmp
add_ebp, %76 # ()
call_eax
sub_ebp, %76
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else72
# stack_c.c 807
jmp %_main_loop_end70
:_main_else72 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_eax # ;
jmp %_main_loop70
:_main_loop_end70
# stack_c.c 808
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else73
# stack_c.c 809
# stack_c.c 816
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s7_m_type)
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 71
mov_eax, %71
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else74
# stack_c.c 817
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpush_eax # %s (global)\n\tmov_eax, &g_%s\n'
mov_eax, &string_59
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
jmp %_main_else_end74
:_main_else74
# stack_c.c 818
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s7_m_type)
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 70
mov_eax, %70
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else75
# stack_c.c 819
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpush_eax # %s (function)\n\tmov_eax, &f_%s\n'
mov_eax, &string_60
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
jmp %_main_else_end75
:_main_else75
# stack_c.c 820
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s7_m_type)
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 67
mov_eax, %67
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else76
# stack_c.c 821
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpush_eax # %u (const %s)\n\tmov_eax, %%%u\n'
mov_eax, &string_61
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 64 (const s7_m_value)
mov_eax, %64
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 64 (const s7_m_value)
mov_eax, %64
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %88 # ()
call_eax
sub_ebp, %88
pop_eax # ;
jmp %_main_else_end76
:_main_else76
# stack_c.c 822
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s7_m_type)
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 76
mov_eax, %76
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else77
# stack_c.c 823
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpush_eax # %s (local)\n\tlea_eax,[ebp+DWORD] %%%d\n'
mov_eax, &string_62
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 4
mov_eax, %4
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 56 (const s7_m_pos)
mov_eax, %56
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
jmp %_main_else_end77
:_main_else77
# stack_c.c 824
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s7_m_type)
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 83
mov_eax, %83
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else78
# stack_c.c 825
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpush_eax # %s (static)\n\tmov_eax, &static_%d_%s\n'
mov_eax, &string_63
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 64 (const s7_m_value)
mov_eax, %64
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %88 # ()
call_eax
sub_ebp, %88
pop_eax # ;
:_main_else78 # no else
:_main_else_end77
:_main_else_end76
:_main_else_end75
:_main_else_end74
jmp %_main_else_end73
:_main_else73
# stack_c.c 828
# stack_c.c 829
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Ident %s is not defined\n'
mov_eax, &string_64
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %88 # ()
call_eax
sub_ebp, %88
pop_eax # ;
# stack_c.c 830
push_eax # error (global)
mov_eax, &g_error
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_else_end73
jmp %_main_else_end69
:_main_else69
# stack_c.c 833
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 48
mov_eax, %48
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else79
# stack_c.c 834
# stack_c.c 835
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpush_eax # %u\n\tmov_eax, %%%u\n'
mov_eax, &string_65
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # int_value (global)
mov_eax, &g_int_value
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
jmp %_main_else_end79
:_main_else79
# stack_c.c 837
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 34
mov_eax, %34
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else80
# stack_c.c 838
push_eax # nr (local)
lea_eax,[ebp+DWORD] %72
push_eax # token (global)
mov_eax, &g_token
push_eax # token_len (global)
mov_eax, &g_token_len
mov_eax,[eax] # ?
push_eax # nr_for_string (function)
mov_eax, &f_nr_for_string
add_ebp, %76 # ()
call_eax
sub_ebp, %76
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 840
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpush_eax # ''
mov_eax, &string_66
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %76 # ()
call_eax
sub_ebp, %76
pop_eax # ;
# stack_c.c 841
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # token (global)
mov_eax, &g_token
push_eax # save_print_string (function)
mov_eax, &f_save_print_string
add_ebp, %76 # ()
call_eax
sub_ebp, %76
pop_eax # ;
# stack_c.c 842
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ''\n\tmov_eax, &string_%d\n'
mov_eax, &string_67
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # nr (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
jmp %_main_else_end80
:_main_else80
# stack_c.c 844
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 39
mov_eax, %39
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else81
# stack_c.c 845
# stack_c.c 846
push_eax # 32
mov_eax, %32
push_eax # token (global)
mov_eax, &g_token
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # &&
je %_main_and_end82
pop_eax
push_eax # token (global)
mov_eax, &g_token
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 127
mov_eax, %127
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
:_main_and_end82
test_eax,eax # if
pop_eax
je %_main_else83
# stack_c.c 847
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpush_eax # '%c'\n\tmov_eax, %%%d\n'
mov_eax, &string_68
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # token (global)
mov_eax, &g_token
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
jmp %_main_else_end83
:_main_else83
# stack_c.c 849
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpush_eax # %d\n\tmov_eax, %%%d\n'
mov_eax, &string_69
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # token (global)
mov_eax, &g_token
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
:_main_else_end83
jmp %_main_else_end81
:_main_else81
# stack_c.c 851
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 63
mov_eax, %63
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else84
# stack_c.c 852
# stack_c.c 853
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_eax,[eax] # ?\n'
mov_eax, &string_70
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end84
:_main_else84
# stack_c.c 855
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 61
mov_eax, %61
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else85
# stack_c.c 856
# stack_c.c 857
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # =\n\tmov_[ebx],eax\n'
mov_eax, &string_71
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end85
:_main_else85
# stack_c.c 859
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 43
mov_eax, %43
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else86
# stack_c.c 860
# stack_c.c 861
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # +\n\tadd_eax,ebx\n'
mov_eax, &string_72
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end86
:_main_else86
# stack_c.c 863
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 45
mov_eax, %45
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # ||
jne %_main_or_end87
pop_eax
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 22
mov_eax, %22
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_main_or_end87
test_eax,eax # if
pop_eax
je %_main_else88
# stack_c.c 864
# stack_c.c 865
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # -\n\tsub_ebx,eax\n\tmov_eax,ebx\n'
mov_eax, &string_73
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end88
:_main_else88
# stack_c.c 867
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 42
mov_eax, %42
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else89
# stack_c.c 868
# stack_c.c 869
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # *\n\tmul_ebx\n'
mov_eax, &string_74
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end89
:_main_else89
# stack_c.c 871
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 38
mov_eax, %38
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else90
# stack_c.c 872
# stack_c.c 873
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # &\n\tand_eax,ebx\n'
mov_eax, &string_75
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end90
:_main_else90
# stack_c.c 875
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 124
mov_eax, %124
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else91
# stack_c.c 876
# stack_c.c 877
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # |\n\tor_eax,ebx\n'
mov_eax, &string_76
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end91
:_main_else91
# stack_c.c 879
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 94
mov_eax, %94
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else92
# stack_c.c 880
# stack_c.c 881
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # ^\n\txor_eax,ebx\n'
mov_eax, &string_77
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end92
:_main_else92
# stack_c.c 883
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 126
mov_eax, %126
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else93
# stack_c.c 884
# stack_c.c 885
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tnot_eax # ~\n'
mov_eax, &string_78
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end93
:_main_else93
# stack_c.c 887
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 47
mov_eax, %47
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else94
# stack_c.c 888
# stack_c.c 889
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_ebx,eax # /\n\tpop_eax\n\tmov_edx, %%0\n\tdiv_ebx\n'
mov_eax, &string_79
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end94
:_main_else94
# stack_c.c 891
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 37
mov_eax, %37
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else95
# stack_c.c 892
# stack_c.c 893
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_ebx,eax # %%\n\tpop_eax\n\tmov_edx, %%0\n\tdiv_ebx\n\tmov_eax,edx\n'
mov_eax, &string_80
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end95
:_main_else95
# stack_c.c 895
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 60
mov_eax, %60
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else96
# stack_c.c 896
# stack_c.c 897
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # <\n\tcmp_eax_ebx\n\tsetb_al\n\tmovzx_eax,al\n'
mov_eax, &string_81
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end96
:_main_else96
# stack_c.c 899
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 62
mov_eax, %62
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else97
# stack_c.c 900
# stack_c.c 901
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # >\n\tcmp_eax_ebx\n\tseta_al\n\tmovzx_eax,al\n'
mov_eax, &string_82
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end97
:_main_else97
# stack_c.c 903
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 33
mov_eax, %33
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else98
# stack_c.c 904
# stack_c.c 905
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\ttest_eax,eax # !\n\tsete_al\n\tmovzx_eax,al\n'
mov_eax, &string_83
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end98
:_main_else98
# stack_c.c 907
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 58
mov_eax, %58
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else99
# stack_c.c 908
# stack_c.c 909
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 910
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else100
# stack_c.c 911
# stack_c.c 912
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Expect identifier after ':'
mov_eax, &string_84
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 913
push_eax # 4294967295
mov_eax, %4294967295
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 915
:_main_else100 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':l_%s_%s\n'
mov_eax, &string_85
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
jmp %_main_else_end99
:_main_else99
# stack_c.c 917
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else101
# stack_c.c 918
# stack_c.c 919
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # =:\n\tmov_[eax],ebx\n\tpop_eax\n'
mov_eax, &string_86
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end101
:_main_else101
# stack_c.c 921
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else102
# stack_c.c 922
# stack_c.c 923
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_al,[eax] # ?1\n\tmovzx_eax,al\n'
mov_eax, &string_87
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end102
:_main_else102
# stack_c.c 925
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 2
mov_eax, %2
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else103
# stack_c.c 926
# stack_c.c 927
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_ax,[eax] # ?2\n\tand_eax, %%65535\n'
mov_eax, &string_88
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end103
:_main_else103
# stack_c.c 929
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 75
mov_eax, %75
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else104
# stack_c.c 930
# stack_c.c 931
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmovsx_eax,al # char\n'
mov_eax, &string_89
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end104
:_main_else104
# stack_c.c 933
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 3
mov_eax, %3
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else105
# stack_c.c 934
# stack_c.c 935
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # =1\n\tmov_[ebx],al\n'
mov_eax, &string_90
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end105
:_main_else105
# stack_c.c 937
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else106
# stack_c.c 938
# stack_c.c 939
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # =2\n\tmov_[ebx],ax\n'
mov_eax, &string_91
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end106
:_main_else106
# stack_c.c 941
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 5
mov_eax, %5
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else107
# stack_c.c 942
# stack_c.c 945
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tadd_ebp, %%%d # ()\n\tcall_eax\n\tsub_ebp, %%%d\n'
mov_eax, &string_92
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
push_eax # pos (global)
mov_eax, &g_pos
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 4
mov_eax, %4
push_eax # pos (global)
mov_eax, &g_pos
mov_eax,[eax] # ?
pop_ebx # *
mul_ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
jmp %_main_else_end107
:_main_else107
# stack_c.c 947
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 6
mov_eax, %6
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else108
# stack_c.c 948
# stack_c.c 949
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_ebx,eax # /s\n\tpop_eax\n\tcdq\n\tidiv_ebx\n'
mov_eax, &string_93
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end108
:_main_else108
# stack_c.c 951
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 7
mov_eax, %7
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else109
# stack_c.c 952
# stack_c.c 953
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_ebx,eax # %%s\n\tpop_eax\n\tcdq\n\tidiv_ebx\n\tmov_eax,edx'
mov_eax, &string_94
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end109
:_main_else109
# stack_c.c 955
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else110
# stack_c.c 956
# stack_c.c 957
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # ==\n\tcmp_eax_ebx\n\tsete_al\n\tmovzx_eax,al\n'
mov_eax, &string_95
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end110
:_main_else110
# stack_c.c 959
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 9
mov_eax, %9
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else111
# stack_c.c 960
# stack_c.c 961
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # !=\n\tcmp_eax_ebx\n\tsetne_al\n\tmovzx_eax,al\n'
mov_eax, &string_96
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end111
:_main_else111
# stack_c.c 963
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 10
mov_eax, %10
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else112
# stack_c.c 964
# stack_c.c 965
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # <=\n\tcmp_eax_ebx\n\tsetbe_al\n\tmovzx_eax,al\n'
mov_eax, &string_97
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end112
:_main_else112
# stack_c.c 967
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 11
mov_eax, %11
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else113
# stack_c.c 968
# stack_c.c 969
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # >=\n\tcmp_eax_ebx\n\tsetae_al\n\tmovzx_eax,al\n'
mov_eax, &string_98
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end113
:_main_else113
# stack_c.c 971
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 12
mov_eax, %12
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else114
# stack_c.c 972
# stack_c.c 973
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # <s\n\tcmp_eax_ebx\n\tsetl_al\n\tmovzx_eax,al\n'
mov_eax, &string_99
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end114
:_main_else114
# stack_c.c 975
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 13
mov_eax, %13
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else115
# stack_c.c 976
# stack_c.c 977
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # <=s\n\tcmp_eax_ebx\n\tsetle_al\n\tmovzx_eax,al\n'
mov_eax, &string_100
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end115
:_main_else115
# stack_c.c 979
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 14
mov_eax, %14
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else116
# stack_c.c 980
# stack_c.c 981
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # >s\n\tcmp_eax_ebx\n\tsetg_al\n\tmovzx_eax,al\n'
mov_eax, &string_101
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end116
:_main_else116
# stack_c.c 983
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 15
mov_eax, %15
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else117
# stack_c.c 984
# stack_c.c 985
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tpop_ebx # >=sfv\n\tcmp_eax_ebx\n\tsetge_al\n\tmovzx_eax,al\n'
mov_eax, &string_102
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end117
:_main_else117
# stack_c.c 987
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 16
mov_eax, %16
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else118
# stack_c.c 988
# stack_c.c 989
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_ecx,eax # <<\n\tpop_eax\n\tshl_eax,cl\n'
mov_eax, &string_103
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end118
:_main_else118
# stack_c.c 991
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 17
mov_eax, %17
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else119
# stack_c.c 992
# stack_c.c 993
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_ecx,eax # >>\n\tpop_eax\n\tshr_eax,cl\n'
mov_eax, &string_104
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end119
:_main_else119
# stack_c.c 995
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 18
mov_eax, %18
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else120
# stack_c.c 996
# stack_c.c 997
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 998
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 123
mov_eax, %123
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else121
# stack_c.c 999
# stack_c.c 1000
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: expecting '{' after '&&'\n'
mov_eax, &string_105
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 1001
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 1003
:_main_else121 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\ttest_eax,eax # &&\n\tje %%_%s_and_end%d\n\tpop_eax\n'
mov_eax, &string_106
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # id (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 1004
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 100
mov_eax, %100
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else122
# stack_c.c 1005
# stack_c.c 1006
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Nesting deeper than %d\n'
mov_eax, &string_38
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # 100
mov_eax, %100
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 1007
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 1009
:_main_else122 # no else
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 65
mov_eax, %65
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 1010
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # id (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 1011
push_eax # nesting_nr_vars (global)
mov_eax, &g_nesting_nr_vars
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 1012
push_eax # nesting_pos (global)
mov_eax, &g_nesting_pos
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # pos (global)
mov_eax, &g_pos
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 1013
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_else_end120
:_main_else120
# stack_c.c 1015
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 19
mov_eax, %19
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else123
# stack_c.c 1016
# stack_c.c 1017
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 1018
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 123
mov_eax, %123
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else124
# stack_c.c 1019
# stack_c.c 1020
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: expecting '{' after '||'\n'
mov_eax, &string_107
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 1021
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 1023
:_main_else124 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\ttest_eax,eax # ||\n\tjne %%_%s_or_end%d\n\tpop_eax\n'
mov_eax, &string_108
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # function_name (local)
lea_eax,[ebp+DWORD] %20
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # id (local)
lea_eax,[ebp+DWORD] %16
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
# stack_c.c 1024
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 100
mov_eax, %100
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else125
# stack_c.c 1025
# stack_c.c 1026
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Nesting deeper than %d\n'
mov_eax, &string_38
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # 100
mov_eax, %100
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 1027
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
# stack_c.c 1029
:_main_else125 # no else
push_eax # nesting_type (global)
mov_eax, &g_nesting_type
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
push_eax # 79
mov_eax, %79
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 1030
push_eax # nesting_id (global)
mov_eax, &g_nesting_id
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # id (local)
lea_eax,[ebp+DWORD] %16
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 1031
push_eax # nesting_nr_vars (global)
mov_eax, &g_nesting_nr_vars
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 1032
push_eax # nesting_pos (global)
mov_eax, &g_nesting_pos
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
mov_eax,[eax] # ?
push_eax # 4
mov_eax, %4
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # pos (global)
mov_eax, &g_pos
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 1033
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_else_end123
:_main_else123
# stack_c.c 1035
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 20
mov_eax, %20
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else126
# stack_c.c 1036
# stack_c.c 1037
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 1038
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 65
mov_eax, %65
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else127
# stack_c.c 1039
# stack_c.c 1040
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: Expecting const ident after '->'. Found %s\n'
mov_eax, &string_109
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 1041
push_eax # 1
mov_eax, %1
mov_ebx,[ebp] # return
push_ebx
ret
:_main_else127 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 1044
:_main_loop128
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else129
jmp %_main_loop_end128
# stack_c.c 1045
:_main_else129 # no else
push_eax # token (global)
mov_eax, &g_token
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 4 (const s7_m_name)
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # strcmp (function)
mov_eax, &f_strcmp
add_ebp, %76 # ()
call_eax
sub_ebp, %76
push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else130
# stack_c.c 1046
jmp %_main_loop_end128
:_main_else130 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_eax # ;
jmp %_main_loop128
:_main_loop_end128
# stack_c.c 1047
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # >=sfv
cmp_eax_ebx
setge_al
movzx_eax,al
test_eax,eax # &&
je %_main_and_end131
pop_eax
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s7_m_type)
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 67
mov_eax, %67
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
:_main_and_end131
test_eax,eax # if
pop_eax
je %_main_else132
# stack_c.c 1048
# stack_c.c 1049
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_eax,[eax] # ->\n\tadd_eax, %%%d\n'
mov_eax, &string_110
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 64 (const s7_m_value)
mov_eax, %64
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
jmp %_main_else_end132
:_main_else132
# stack_c.c 1052
# stack_c.c 1053
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d: Ident %s is not defined\n'
mov_eax, &string_111
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %76
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 1054
push_eax # error (global)
mov_eax, &g_error
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_else_end132
jmp %_main_else_end126
:_main_else126
# stack_c.c 1057
push_eax # sym (global)
mov_eax, &g_sym
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 97
mov_eax, %97
push_eax # 21
mov_eax, %21
pop_ebx # +
add_eax,ebx
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else133
# stack_c.c 1058
# stack_c.c 1059
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\tmov_ebx,eax # >< swap\n\tpop_eax\n\tpush_ebx\n'
mov_eax, &string_112
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_else_end133
:_main_else133
# stack_c.c 1062
# stack_c.c 1063
push_eax # ferr (global)
mov_eax, &g_ferr
mov_eax,[eax] # ?
push_eax # 'ERROR %d.%d: token |%s| not supported\n'
mov_eax, &string_113
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # cur_line (global)
mov_eax, &g_cur_line
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # cur_column (global)
mov_eax, &g_cur_column
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # token (global)
mov_eax, &g_token
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %72
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 1064
push_eax # error (global)
mov_eax, &g_error
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_else_end133
:_main_else_end126
:_main_else_end123
:_main_else_end120
:_main_else_end119
:_main_else_end118
:_main_else_end117
:_main_else_end116
:_main_else_end115
:_main_else_end114
:_main_else_end113
:_main_else_end112
:_main_else_end111
:_main_else_end110
:_main_else_end109
:_main_else_end108
:_main_else_end107
:_main_else_end106
:_main_else_end105
:_main_else_end104
:_main_else_end103
:_main_else_end102
:_main_else_end101
:_main_else_end99
:_main_else_end98
:_main_else_end97
:_main_else_end96
:_main_else_end95
:_main_else_end94
:_main_else_end93
:_main_else_end92
:_main_else_end91
:_main_else_end90
:_main_else_end89
:_main_else_end88
:_main_else_end86
:_main_else_end85
:_main_else_end84
:_main_else_end81
:_main_else_end80
:_main_else_end79
:_main_else_end69
:_main_else_end67
:_main_else_end66
:_main_else_end65
:_main_else_end64
:_main_else_end54
:_main_else_end53
:_main_else_end52
:_main_else_end49
:_main_else_end43
:_main_else_end39
:_main_else_end30
:_main_else_end25
:_main_else_end16
# stack_c.c 1067
push_eax # get_token (function)
mov_eax, &f_get_token
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
jmp %_main_loop13
:_main_loop_end13
# stack_c.c 1070
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\n:ELF_data\n\n'
mov_eax, &string_114
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
# stack_c.c 1071
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':SYS_MALLOC NULL\n'
mov_eax, &string_115
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %72 # ()
call_eax
sub_ebp, %72
pop_eax # ;
push_eax # nr (local)
lea_eax,[ebp+DWORD] %72
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 1073
push_eax # string (local)
lea_eax,[ebp+DWORD] %76
push_eax # strings (global)
mov_eax, &g_strings
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_loop134
push_eax # string (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # 0
mov_eax, %0
pop_ebx # !=
cmp_eax_ebx
setne_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else135
jmp %_main_loop_end134
# stack_c.c 1074
# stack_c.c 1075
:_main_else135 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':string_%d '
mov_eax, &string_116
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # nr (local)
lea_eax,[ebp+DWORD] %72
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
push_eax # safe_string (local)
lea_eax,[ebp+DWORD] %80
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 1077
push_eax # i (local)
lea_eax,[ebp+DWORD] %84
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_loop136
push_eax # i (local)
lea_eax,[ebp+DWORD] %84
mov_eax,[eax] # ?
push_eax # string (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ->
add_eax, %4
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else137
jmp %_main_loop_end136
# stack_c.c 1078
:_main_else137 # no else
push_eax # ch (local)
lea_eax,[ebp+DWORD] %88
push_eax # string (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %84
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
# stack_c.c 1080
push_eax # ch (local)
lea_eax,[ebp+DWORD] %88
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 34
mov_eax, %34
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # ||
jne %_main_or_end138
pop_eax
push_eax # ch (local)
lea_eax,[ebp+DWORD] %88
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 32
mov_eax, %32
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
:_main_or_end138
test_eax,eax # if
pop_eax
je %_main_else139
# stack_c.c 1081
# stack_c.c 1082
push_eax # safe_string (local)
lea_eax,[ebp+DWORD] %80
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
# stack_c.c 1083
jmp %_main_loop_end136
:_main_else139 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %84
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_loop136
:_main_loop_end136
# stack_c.c 1086
push_eax # safe_string (local)
lea_eax,[ebp+DWORD] %80
mov_eax,[eax] # ?
test_eax,eax # if
pop_eax
je %_main_else140
# stack_c.c 1087
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\"%s\"'
mov_eax, &string_117
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %84
push_eax # string (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %84
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %88 # ()
call_eax
sub_ebp, %88
pop_eax # ;
jmp %_main_else_end140
:_main_else140
# stack_c.c 1089
# stack_c.c 1090
push_eax # i (local)
lea_eax,[ebp+DWORD] %84
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_loop141
push_eax # i (local)
lea_eax,[ebp+DWORD] %84
mov_eax,[eax] # ?
push_eax # string (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ->
add_eax, %4
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else142
jmp %_main_loop_end141
# stack_c.c 1091
:_main_else142 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '!%u%s'
mov_eax, &string_118
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %88
push_eax # string (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ->
add_eax, %0
mov_eax,[eax] # ?
push_eax # i (local)
lea_eax,[ebp+DWORD] %84
mov_eax,[eax] # ?
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %88
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # i (local)
lea_eax,[ebp+DWORD] %84
mov_eax,[eax] # ?
push_eax # 20
mov_eax, %20
mov_ebx,eax # %s
pop_eax
cdq
idiv_ebx
mov_eax,edx push_eax # 16
mov_eax, %16
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else143
push_eax # '\n '
mov_eax, &string_119
jmp %_main_else_end143
:_main_else143
push_eax # ' '
mov_eax, &string_1
:_main_else_end143
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %88
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %96 # ()
call_eax
sub_ebp, %96
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %84
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_loop141
:_main_loop_end141
# stack_c.c 1092
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '!0'
mov_eax, &string_120
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
:_main_else_end140
# stack_c.c 1094
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\n'
mov_eax, &string_2
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
push_eax # string (local)
lea_eax,[ebp+DWORD] %76
push_eax # string (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ->
add_eax, %8
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # nr (local)
lea_eax,[ebp+DWORD] %72
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_loop134
:_main_loop_end134
# stack_c.c 1096
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_loop144
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else145
jmp %_main_loop_end144
# stack_c.c 1097
:_main_else145 # no else
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s7_m_type)
mov_eax, %0
pop_ebx # +
add_eax,ebx
mov_al,[eax] # ?1
movzx_eax,al
movsx_eax,al # char
push_eax # 71
mov_eax, %71
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else146
# stack_c.c 1098
# stack_c.c 1099
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':g_%s'
mov_eax, &string_121
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 4 (const s7_m_name)
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %84 # ()
call_eax
sub_ebp, %84
pop_eax # ;
# stack_c.c 1100
push_eax # j (local)
lea_eax,[ebp+DWORD] %80
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_loop147
push_eax # j (local)
lea_eax,[ebp+DWORD] %80
mov_eax,[eax] # ?
push_eax # idents (global)
mov_eax, &g_idents
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # 68
mov_eax, %68
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 60 (const s7_m_size)
mov_eax, %60
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else148
jmp %_main_loop_end147
# stack_c.c 1101
:_main_else148 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '%sNULL'
mov_eax, &string_122
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %84
push_eax # j (local)
lea_eax,[ebp+DWORD] %80
mov_eax,[eax] # ?
push_eax # 8
mov_eax, %8
mov_ebx,eax # %s
pop_eax
cdq
idiv_ebx
mov_eax,edx push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else149
push_eax # '\n\t'
mov_eax, &string_123
jmp %_main_else_end149
:_main_else149
push_eax # ' '
mov_eax, &string_1
:_main_else_end149
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %84
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %88 # ()
call_eax
sub_ebp, %88
pop_eax # ;
push_eax # j (local)
lea_eax,[ebp+DWORD] %80
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_loop147
:_main_loop_end147
# stack_c.c 1102
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\n'
mov_eax, &string_2
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
:_main_else146 # no else
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_loop144
:_main_loop_end144
# stack_c.c 1104
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_loop150
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # nr_statics (global)
mov_eax, &g_nr_statics
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else151
jmp %_main_loop_end150
# stack_c.c 1105
# stack_c.c 1106
:_main_else151 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # ':static_%d_%s'
mov_eax, &string_124
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # statics (global)
mov_eax, &g_statics
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # 56
mov_eax, %56
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 0 (const s8_m_name)
mov_eax, %0
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %80
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %88 # ()
call_eax
sub_ebp, %88
pop_eax # ;
# stack_c.c 1107
push_eax # j (local)
lea_eax,[ebp+DWORD] %80
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
:_main_loop152
push_eax # j (local)
lea_eax,[ebp+DWORD] %80
mov_eax,[eax] # ?
push_eax # statics (global)
mov_eax, &g_statics
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
mov_eax,[eax] # ?
push_eax # 56
mov_eax, %56
pop_ebx # *
mul_ebx
pop_ebx # +
add_eax,ebx
push_eax # 52 (const s8_m_size)
mov_eax, %52
pop_ebx # +
add_eax,ebx
mov_eax,[eax] # ?
pop_ebx # <s
cmp_eax_ebx
setl_al
movzx_eax,al
test_eax,eax # !
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else153
jmp %_main_loop_end152
# stack_c.c 1108
:_main_else153 # no else
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '%sNULL'
mov_eax, &string_122
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %84
push_eax # j (local)
lea_eax,[ebp+DWORD] %80
mov_eax,[eax] # ?
push_eax # 8
mov_eax, %8
mov_ebx,eax # %s
pop_eax
cdq
idiv_ebx
mov_eax,edx push_eax # 0
mov_eax, %0
pop_ebx # ==
cmp_eax_ebx
sete_al
movzx_eax,al
test_eax,eax # if
pop_eax
je %_main_else154
push_eax # '\n\t'
mov_eax, &string_123
jmp %_main_else_end154
:_main_else154
push_eax # ' '
mov_eax, &string_1
:_main_else_end154
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __var_args (local)
lea_eax,[ebp+DWORD] %84
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %88 # ()
call_eax
sub_ebp, %88
pop_eax # ;
push_eax # j (local)
lea_eax,[ebp+DWORD] %80
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_loop152
:_main_loop_end152
# stack_c.c 1109
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\n'
mov_eax, &string_2
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %80 # ()
call_eax
sub_ebp, %80
pop_eax # ;
push_eax # i (local)
lea_eax,[ebp+DWORD] %76
push_eax # $ (dup)
mov_eax,[eax] # ?
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =
mov_[ebx],eax
push_eax # 1
mov_eax, %1
pop_ebx # -
sub_ebx,eax
mov_eax,ebx
pop_eax # ;
jmp %_main_loop150
:_main_loop_end150
# stack_c.c 1111
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # '\n:ELF_end\n'
mov_eax, &string_125
push_eax # 0
mov_eax, %0
push_eax # fprintf (function)
mov_eax, &f_fprintf
add_ebp, %76 # ()
call_eax
sub_ebp, %76
pop_eax # ;
# stack_c.c 1113
push_eax # fout (global)
mov_eax, &g_fout
mov_eax,[eax] # ?
push_eax # fclose (function)
mov_eax, &f_fclose
add_ebp, %76 # ()
call_eax
sub_ebp, %76
pop_eax # ;
# stack_c.c 1115
push_eax # error (global)
mov_eax, &g_error
mov_eax,[eax] # ?
mov_ebx,[ebp] # return
push_ebx
ret
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:f___init_globals__
pop_eax
mov_[ebp],eax
pop_eax
push_eax # __sys_stdin (global)
mov_eax, &g___sys_stdin
push_eax # $ (dup)
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __sys_stdout (global)
mov_eax, &g___sys_stdout
push_eax # $ (dup)
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # __sys_stderr (global)
mov_eax, &g___sys_stderr
push_eax # $ (dup)
push_eax # 2
mov_eax, %2
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # stdin (global)
mov_eax, &g_stdin
push_eax # __sys_stdin (global)
mov_eax, &g___sys_stdin
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # stdout (global)
mov_eax, &g_stdout
push_eax # __sys_stdout (global)
mov_eax, &g___sys_stdout
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # stderr (global)
mov_eax, &g_stderr
push_eax # __sys_stderr (global)
mov_eax, &g___sys_stderr
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # LINE_MACRO_OUTPUT_FORMAT_GCC (global)
mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_GCC
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # LINE_MACRO_OUTPUT_FORMAT_NONE (global)
mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_NONE
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # LINE_MACRO_OUTPUT_FORMAT_STD (global)
mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_STD
push_eax # 2
mov_eax, %2
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # LINE_MACRO_OUTPUT_FORMAT_P10 (global)
mov_eax, &g_LINE_MACRO_OUTPUT_FORMAT_P10
push_eax # 11
mov_eax, %11
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # _sys_env (global)
mov_eax, &g__sys_env
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # cur_char (global)
mov_eax, &g_cur_char
push_eax # 0
mov_eax, %0
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # cur_char_line (global)
mov_eax, &g_cur_char_line
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # cur_char_column (global)
mov_eax, &g_cur_char_column
push_eax # 1
mov_eax, %1
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # token_len (global)
mov_eax, &g_token_len
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # cur_line (global)
mov_eax, &g_cur_line
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # cur_column (global)
mov_eax, &g_cur_column
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # keywords (global)
mov_eax, &g_keywords
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'void'
mov_eax, &string_126
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 70
mov_eax, %70
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'const'
mov_eax, &string_127
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 67
mov_eax, %67
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'int'
mov_eax, &string_128
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 86
mov_eax, %86
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'do'
mov_eax, &string_129
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 76
mov_eax, %76
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'break'
mov_eax, &string_130
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 66
mov_eax, %66
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'continue'
mov_eax, &string_131
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 68
mov_eax, %68
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'if'
mov_eax, &string_132
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 73
mov_eax, %73
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'else'
mov_eax, &string_133
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 69
mov_eax, %69
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'return'
mov_eax, &string_134
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 82
mov_eax, %82
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'goto'
mov_eax, &string_135
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 71
mov_eax, %71
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # 'static'
mov_eax, &string_136
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 83
mov_eax, %83
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # 'char'
mov_eax, &string_137
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 75
mov_eax, %75
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # symbols (global)
mov_eax, &g_symbols
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '=:'
mov_eax, &string_138
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 0
mov_eax, %0
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '?1'
mov_eax, &string_139
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 1
mov_eax, %1
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '?2'
mov_eax, &string_140
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 2
mov_eax, %2
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '=1'
mov_eax, &string_141
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 3
mov_eax, %3
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '=2'
mov_eax, &string_142
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '()'
mov_eax, &string_143
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 5
mov_eax, %5
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '/s'
mov_eax, &string_144
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 6
mov_eax, %6
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '%s'
mov_eax, &string_145
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 7
mov_eax, %7
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '=='
mov_eax, &string_146
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '!='
mov_eax, &string_147
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 9
mov_eax, %9
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '<='
mov_eax, &string_148
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 10
mov_eax, %10
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '>='
mov_eax, &string_149
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 11
mov_eax, %11
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '<s'
mov_eax, &string_150
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 12
mov_eax, %12
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '<=s'
mov_eax, &string_151
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 13
mov_eax, %13
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '>s'
mov_eax, &string_152
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 14
mov_eax, %14
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '>=s'
mov_eax, &string_153
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 15
mov_eax, %15
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '<<'
mov_eax, &string_154
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 16
mov_eax, %16
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '>>'
mov_eax, &string_155
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 17
mov_eax, %17
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '&&'
mov_eax, &string_156
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 18
mov_eax, %18
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '||'
mov_eax, &string_157
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 19
mov_eax, %19
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '->'
mov_eax, &string_158
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 20
mov_eax, %20
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # $ (dup)
push_eax # '><'
mov_eax, &string_159
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 21
mov_eax, %21
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # 8
mov_eax, %8
pop_ebx # +
add_eax,ebx
push_eax # $ (dup)
push_eax # '-p'
mov_eax, &string_160
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 4
mov_eax, %4
pop_ebx # +
add_eax,ebx
push_eax # 97
mov_eax, %97
push_eax # 22
mov_eax, %22
pop_ebx # +
add_eax,ebx
pop_ebx # =1
mov_[ebx],al
pop_eax # ;
push_eax # error (global)
mov_eax, &g_error
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # nr_idents (global)
mov_eax, &g_nr_idents
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # pos (global)
mov_eax, &g_pos
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # strings (global)
mov_eax, &g_strings
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # nesting_depth (global)
mov_eax, &g_nesting_depth
push_eax # 0
mov_eax, %0
pop_ebx # =
mov_[ebx],eax
pop_eax # ;
push_eax # 0
mov_eax, %0
mov_ebx,[ebp] # return
push_ebx
ret
:ELF_data
:SYS_MALLOC NULL
:string_0 "__sys_printf %"
:string_1 " "
:string_2 !10 !0
:string_3 !77 !111 !100 !101 !32 !37 !115 !32 !115 !104 !111 !117 !108 !100 !32 !98 !101
!32 !39 !114 !47 !119 !40 !98 !41 !40 !43 !41 !39 !44 !32 !39 !119 !39 !44 !32 !111
!114 !32 !39 !119 !98 !39 !10 !0
:string_4 !102 !111 !112 !101 !110 !32 !37 !115 !32 !37 !115 !32 !114 !101 !116 !117 !114
!110 !101 !100 !32 !37 !100 !10 !0
:string_5 !84 !79 !68 !79 !32 !116 !105 !109 !101 !10 !0
:string_6 !84 !79 !68 !79 !32 !108 !111 !99 !97 !108 !116 !105 !109 !101 !10 !0
:string_7 !84 !79 !68 !79 !32 !115 !101 !116 !106 !109 !112 !10 !0
:string_8 !84 !79 !68 !79 !32 !108 !111 !110 !103 !106 !109 !112 !10 !0
:string_9 !115 !115 !99 !97 !110 !102 !58 !32 !102 !111 !114 !109 !97 !116 !32 !37 !37
!37 !99 !32 !110 !111 !116 !32 !115 !117 !112 !112 !111 !114 !116 !101 !100 !10 !0
:string_10 !84 !79 !68 !79 !32 !97 !116 !111 !105 !10 !0
:string_11 !84 !79 !68 !79 !32 !101 !120 !101 !99 !118 !112 !10 !0
:string_12 !69 !82 !82 !79 !82 !32 !37 !100 !58 !32 !86 !97 !114 !105 !97 !98 !108
!101 !32 !39 !37 !115 !39 !32 !105 !115 !32 !108 !111 !110 !103 !101 !114 !32 !116 !104 !97
!110 !32 !37 !100 !32 !99 !104 !97 !114 !97 !99 !116 !101 !114 !115 !10 !0
:string_13 !69 !82 !82 !79 !82 !32 !37 !100 !58 !32 !83 !116 !114 !105 !110 !103 !32
!108 !111 !110 !103 !101 !114 !32 !116 !104 !97 !110 !32 !37 !100 !32 !99 !104 !97 !114 !97
!99 !116 !101 !114 !115 !10 !0
:string_14 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !73 !108 !108 !101
!103 !97 !108 !32 !99 !104 !97 !114 !97 !99 !116 !101 !114 !32 !39 !37 !99 !39 !32 !97
!102 !116 !101 !114 !32 !92 !120 !10 !0
:string_15 "%d"
:string_16 "\n"
:string_17 "\t"
:string_18 "\%c"
:string_19 "?"
:string_20 "%c"
:string_21 "-o"
:string_22 "w"
:string_23 !69 !82 !82 !79 !82 !58 !32 !67 !97 !110 !110 !111 !116 !32 !111 !112 !101
!110 !32 !102 !105 !108 !101 !32 !39 !37 !115 !39 !32 !102 !111 !114 !32 !119 !114 !105 !116
!105 !110 !103 !10 !0
:string_24 "-i"
:string_25 "r"
:string_26 !69 !82 !82 !79 !82 !58 !32 !67 !97 !110 !110 !111 !116 !32 !111 !112 !101
!110 !32 !102 !105 !108 !101 !32 !39 !37 !115 !39 !32 !102 !111 !114 !32 !105 !110 !112 !117
!116 !10 !0
:string_27 "sys_int80"
:string_28 "sys_malloc"
:string_29 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
!99 !116 !105 !110 !103 !32 !110 !97 !109 !101 !32 !97 !102 !116 !101 !114 !32 !39 !118 !111
!105 !100 !39 !32 !102 !111 !114 !32 !102 !117 !110 !99 !116 !105 !111 !110 !10 !0
:string_30 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !77 !111 !114 !101
!32 !116 !104 !97 !110 !32 !37 !100 !32 !118 !97 !114 !105 !97 !98 !108 !101 !115 !10 !0
:string_31 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
!99 !116 !32 !59 !32 !111 !114 !32 !123 !32 !97 !102 !116 !101 !114 !32 !102 !117 !110 !99
!116 !105 !111 !110 !32 !110 !97 !109 !101 !10 !0
:string_32 !10 !58 !102 !95 !37 !115 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10 !9
!109 !111 !118 !95 !91 !101 !98 !112 !93 !44 !101 !97 !120 !10 !9 !112 !111 !112 !95 !101
!97 !120 !10 !0
:string_33 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
!99 !116 !105 !110 !103 !32 !110 !97 !109 !101 !32 !97 !102 !116 !101 !114 !32 !39 !99 !111
!110 !115 !116 !39 !10 !0
:string_34 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
!99 !116 !105 !110 !103 !32 !110 !117 !109 !98 !101 !114 !32 !97 !102 !116 !101 !114 !32 !39
!99 !111 !110 !115 !116 !39 !32 !60 !110 !97 !109 !101 !62 !10 !0
:string_35 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
!99 !116 !105 !110 !103 !32 !110 !97 !109 !101 !32 !97 !102 !116 !101 !114 !32 !39 !105 !110
!116 !39 !10 !0
:string_36 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !101 !120 !112 !101
!99 !116 !105 !110 !103 !32 !39 !123 !39 !32 !97 !102 !116 !101 !114 !32 !39 !100 !111 !39
!10 !0
:string_37 !58 !95 !37 !115 !95 !108 !111 !111 !112 !37 !100 !10 !0
:string_38 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !78 !101 !115 !116
!105 !110 !103 !32 !100 !101 !101 !112 !101 !114 !32 !116 !104 !97 !110 !32 !37 !100 !10 !0
:string_39 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !39 !98 !114 !101
!97 !107 !39 !32 !111 !117 !116 !115 !105 !100 !101 !32 !39 !108 !111 !111 !112 !39 !10 !0
:string_40 !9 !106 !109 !112 !32 !37 !37 !95 !37 !115 !95 !108 !111 !111 !112 !95 !101
!110 !100 !37 !100 !10 !0
:string_41 !9 !106 !109 !112 !32 !37 !37 !95 !37 !115 !95 !108 !111 !111 !112 !37 !100
!10 !0
:string_42 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !101 !120 !112 !101
!99 !116 !105 !110 !103 !32 !39 !123 !39 !32 !97 !102 !116 !101 !114 !32 !39 !105 !102 !39
!10 !0
:string_43 !9 !116 !101 !115 !116 !95 !101 !97 !120 !44 !101 !97 !120 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !105 !102 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
!9 !106 !101 !32 !37 !37 !95 !37 !115 !95 !101 !108 !115 !101 !37 !100 !10 !0
:string_44 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !117 !110 !101 !120
!112 !101 !99 !116 !101 !100 !32 !39 !101 !108 !115 !101 !39 !10 !0
:string_45 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !84 !111 !32 !109
!97 !110 !121 !32 !125 !10 !0
:string_46 !9 !106 !109 !112 !32 !37 !37 !95 !37 !115 !95 !108 !111 !111 !112 !37 !100
!10 !58 !95 !37 !115 !95 !108 !111 !111 !112 !95 !101 !110 !100 !37 !100 !10 !0
:string_47 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !101 !120 !112 !101
!99 !116 !105 !110 !103 !32 !39 !123 !39 !32 !97 !102 !116 !101 !114 !32 !39 !101 !108 !115
!101 !39 !10 !0
:string_48 !9 !106 !109 !112 !32 !37 !37 !95 !37 !115 !95 !101 !108 !115 !101 !95 !101
!110 !100 !37 !100 !10 !0
:string_49 !58 !95 !37 !115 !95 !101 !108 !115 !101 !37 !100 !10 !0
:string_50 !58 !95 !37 !115 !95 !101 !108 !115 !101 !37 !100 !32 !35 !32 !110 !111 !32
!101 !108 !115 !101 !10 !0
:string_51 !58 !95 !37 !115 !95 !101 !108 !115 !101 !95 !101 !110 !100 !37 !100 !10 !0
:string_52 !58 !95 !37 !115 !95 !97 !110 !100 !95 !101 !110 !100 !37 !100 !10 !0
:string_53 !58 !95 !37 !115 !95 !111 !114 !95 !101 !110 !100 !37 !100 !10 !0
:string_54 !9 !109 !111 !118 !95 !101 !98 !120 !44 !91 !101 !98 !112 !93 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !114 !101 !116 !117 !114 !110 !10 !9 !112 !117 !115 !104
!95 !101 !98 !120 !10 !9 !114 !101 !116 !10 !0
:string_55 !9 !112 !111 !112 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !59 !10 !0
:string_56 !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !36 !32 !40 !100 !117 !112 !41 !10 !0
:string_57 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
!99 !116 !105 !110 !103 !32 !108 !97 !98 !101 !108 !32 !97 !102 !116 !101 !114 !32 !39 !103
!111 !116 !111 !39 !10 !0
:string_58 !9 !106 !109 !112 !32 !37 !37 !108 !95 !37 !115 !95 !37 !115 !10 !0
:string_59 !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !37 !115 !32 !40 !103 !108 !111 !98 !97 !108 !41 !10
!9 !109 !111 !118 !95 !101 !97 !120 !44 !32 !38 !103 !95 !37 !115 !10 !0
:string_60 !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !37 !115 !32 !40 !102 !117 !110 !99 !116 !105 !111 !110
!41 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44 !32 !38 !102 !95 !37 !115 !10 !0
:string_61 !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !37 !117 !32 !40 !99 !111 !110 !115 !116 !32 !37 !115
!41 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44 !32 !37 !37 !37 !117 !10 !0
:string_62 !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !37 !115 !32 !40 !108 !111 !99 !97 !108 !41 !10 !9
!108 !101 !97 !95 !101 !97 !120 !44 !91 !101 !98 !112 !43 !68 !87 !79 !82 !68 !93 !32
!37 !37 !37 !100 !10 !0
:string_63 !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !37 !115 !32 !40 !115 !116 !97 !116 !105 !99 !41 !10
!9 !109 !111 !118 !95 !101 !97 !120 !44 !32 !38 !115 !116 !97 !116 !105 !99 !95 !37 !100
!95 !37 !115 !10 !0
:string_64 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !73 !100 !101 !110
!116 !32 !37 !115 !32 !105 !115 !32 !110 !111 !116 !32 !100 !101 !102 !105 !110 !101 !100 !10
!0
:string_65 !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !37 !117 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44
!32 !37 !37 !37 !117 !10 !0
:string_66 !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !39 !0
:string_67 !39 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44 !32 !38 !115 !116 !114 !105
!110 !103 !95 !37 !100 !10 !0
:string_68 !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !39 !37 !99 !39 !10 !9 !109 !111 !118 !95 !101 !97
!120 !44 !32 !37 !37 !37 !100 !10 !0
:string_69 !9 !112 !117 !115 !104 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !37 !100 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44
!32 !37 !37 !37 !100 !10 !0
:string_70 !9 !109 !111 !118 !95 !101 !97 !120 !44 !91 !101 !97 !120 !93 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !63 !10 !0
:string_71 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !61 !10 !9 !109 !111 !118 !95 !91 !101 !98 !120 !93
!44 !101 !97 !120 !10 !0
:string_72 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !43 !10 !9 !97 !100 !100 !95 !101 !97 !120 !44 !101
!98 !120 !10 !0
:string_73 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !45 !10 !9 !115 !117 !98 !95 !101 !98 !120 !44 !101
!97 !120 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44 !101 !98 !120 !10 !0
:string_74 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !42 !10 !9 !109 !117 !108 !95 !101 !98 !120 !10 !0
:string_75 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !38 !10 !9 !97 !110 !100 !95 !101 !97 !120 !44 !101
!98 !120 !10 !0
:string_76 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !124 !10 !9 !111 !114 !95 !101 !97 !120 !44 !101 !98
!120 !10 !0
:string_77 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !94 !10 !9 !120 !111 !114 !95 !101 !97 !120 !44 !101
!98 !120 !10 !0
:string_78 !9 !110 !111 !116 !95 !101 !97 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !126 !10 !0
:string_79 !9 !109 !111 !118 !95 !101 !98 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !47 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10 !9
!109 !111 !118 !95 !101 !100 !120 !44 !32 !37 !37 !48 !10 !9 !100 !105 !118 !95 !101 !98
!120 !10 !0
:string_80 !9 !109 !111 !118 !95 !101 !98 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !37 !37 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
!9 !109 !111 !118 !95 !101 !100 !120 !44 !32 !37 !37 !48 !10 !9 !100 !105 !118 !95 !101
!98 !120 !10 !9 !109 !111 !118 !95 !101 !97 !120 !44 !101 !100 !120 !10 !0
:string_81 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !60 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95 !101
!98 !120 !10 !9 !115 !101 !116 !98 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120 !95 !101
!97 !120 !44 !97 !108 !10 !0
:string_82 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !62 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95 !101
!98 !120 !10 !9 !115 !101 !116 !97 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120 !95 !101
!97 !120 !44 !97 !108 !10 !0
:string_83 !9 !116 !101 !115 !116 !95 !101 !97 !120 !44 !101 !97 !120 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !33 !10 !9 !115 !101 !116 !101 !95 !97 !108 !10 !9
!109 !111 !118 !122 !120 !95 !101 !97 !120 !44 !97 !108 !10 !0
:string_84 "ERROR %d.%d: Expect identifier after ':"
:string_85 !58 !108 !95 !37 !115 !95 !37 !115 !10 !0
:string_86 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !61 !58 !10 !9 !109 !111 !118 !95 !91 !101 !97 !120
!93 !44 !101 !98 !120 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10 !0
:string_87 !9 !109 !111 !118 !95 !97 !108 !44 !91 !101 !97 !120 !93 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !63 !49 !10 !9 !109 !111 !118 !122 !120 !95 !101 !97
!120 !44 !97 !108 !10 !0
:string_88 !9 !109 !111 !118 !95 !97 !120 !44 !91 !101 !97 !120 !93 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !63 !50 !10 !9 !97 !110 !100 !95 !101 !97 !120 !44
!32 !37 !37 !54 !53 !53 !51 !53 !10 !0
:string_89 !9 !109 !111 !118 !115 !120 !95 !101 !97 !120 !44 !97 !108 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !99 !104 !97 !114 !10 !0
:string_90 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !61 !49 !10 !9 !109 !111 !118 !95 !91 !101 !98 !120
!93 !44 !97 !108 !10 !0
:string_91 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !61 !50 !10 !9 !109 !111 !118 !95 !91 !101 !98 !120
!93 !44 !97 !120 !10 !0
:string_92 !9 !97 !100 !100 !95 !101 !98 !112 !44 !32 !37 !37 !37 !100 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !40 !41 !10 !9 !99 !97 !108 !108 !95 !101 !97 !120
!10 !9 !115 !117 !98 !95 !101 !98 !112 !44 !32 !37 !37 !37 !100 !10 !0
:string_93 !9 !109 !111 !118 !95 !101 !98 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !47 !115 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
!9 !99 !100 !113 !10 !9 !105 !100 !105 !118 !95 !101 !98 !120 !10 !0
:string_94 !9 !109 !111 !118 !95 !101 !98 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !37 !37 !115 !10 !9 !112 !111 !112 !95 !101 !97 !120
!10 !9 !99 !100 !113 !10 !9 !105 !100 !105 !118 !95 !101 !98 !120 !10 !9 !109 !111 !118
!95 !101 !97 !120 !44 !101 !100 !120 !0
:string_95 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !61 !61 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
!101 !98 !120 !10 !9 !115 !101 !116 !101 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120 !95
!101 !97 !120 !44 !97 !108 !10 !0
:string_96 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !33 !61 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
!101 !98 !120 !10 !9 !115 !101 !116 !110 !101 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120
!95 !101 !97 !120 !44 !97 !108 !10 !0
:string_97 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !60 !61 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
!101 !98 !120 !10 !9 !115 !101 !116 !98 !101 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120
!95 !101 !97 !120 !44 !97 !108 !10 !0
:string_98 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !62 !61 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
!101 !98 !120 !10 !9 !115 !101 !116 !97 !101 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120
!95 !101 !97 !120 !44 !97 !108 !10 !0
:string_99 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !60 !115 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
!101 !98 !120 !10 !9 !115 !101 !116 !108 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120 !95
!101 !97 !120 !44 !97 !108 !10 !0
:string_100 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !60 !61 !115 !10 !9 !99 !109 !112 !95 !101 !97 !120
!95 !101 !98 !120 !10 !9 !115 !101 !116 !108 !101 !95 !97 !108 !10 !9 !109 !111 !118 !122
!120 !95 !101 !97 !120 !44 !97 !108 !10 !0
:string_101 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !62 !115 !10 !9 !99 !109 !112 !95 !101 !97 !120 !95
!101 !98 !120 !10 !9 !115 !101 !116 !103 !95 !97 !108 !10 !9 !109 !111 !118 !122 !120 !95
!101 !97 !120 !44 !97 !108 !10 !0
:string_102 !9 !112 !111 !112 !95 !101 !98 !120 !32 !32 !32 !32 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !62 !61 !115 !102 !118 !10 !9 !99 !109 !112 !95 !101
!97 !120 !95 !101 !98 !120 !10 !9 !115 !101 !116 !103 !101 !95 !97 !108 !10 !9 !109 !111
!118 !122 !120 !95 !101 !97 !120 !44 !97 !108 !10 !0
:string_103 !9 !109 !111 !118 !95 !101 !99 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !60 !60 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
!9 !115 !104 !108 !95 !101 !97 !120 !44 !99 !108 !10 !0
:string_104 !9 !109 !111 !118 !95 !101 !99 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !62 !62 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
!9 !115 !104 !114 !95 !101 !97 !120 !44 !99 !108 !10 !0
:string_105 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !101 !120 !112 !101
!99 !116 !105 !110 !103 !32 !39 !123 !39 !32 !97 !102 !116 !101 !114 !32 !39 !38 !38 !39
!10 !0
:string_106 !9 !116 !101 !115 !116 !95 !101 !97 !120 !44 !101 !97 !120 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !38 !38 !10 !9 !106 !101 !32 !37 !37 !95 !37 !115
!95 !97 !110 !100 !95 !101 !110 !100 !37 !100 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
!0
:string_107 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !101 !120 !112 !101
!99 !116 !105 !110 !103 !32 !39 !123 !39 !32 !97 !102 !116 !101 !114 !32 !39 !124 !124 !39
!10 !0
:string_108 !9 !116 !101 !115 !116 !95 !101 !97 !120 !44 !101 !97 !120 !32 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !124 !124 !10 !9 !106 !110 !101 !32 !37 !37 !95 !37
!115 !95 !111 !114 !95 !101 !110 !100 !37 !100 !10 !9 !112 !111 !112 !95 !101 !97 !120 !10
!0
:string_109 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !69 !120 !112 !101
!99 !116 !105 !110 !103 !32 !99 !111 !110 !115 !116 !32 !105 !100 !101 !110 !116 !32 !97 !102
!116 !101 !114 !32 !39 !45 !62 !39 !46 !32 !70 !111 !117 !110 !100 !32 !37 !115 !10 !0
:string_110 !9 !109 !111 !118 !95 !101 !97 !120 !44 !91 !101 !97 !120 !93 !32 !32 !32
!32 !32 !32 !32 !32 !32 !35 !32 !45 !62 !10 !9 !97 !100 !100 !95 !101 !97 !120 !44
!32 !37 !37 !37 !100 !10 !0
:string_111 !69 !82 !82 !79 !82 !32 !37 !100 !58 !32 !73 !100 !101 !110 !116 !32 !37
!115 !32 !105 !115 !32 !110 !111 !116 !32 !100 !101 !102 !105 !110 !101 !100 !10 !0
:string_112 !9 !109 !111 !118 !95 !101 !98 !120 !44 !101 !97 !120 !32 !32 !32 !32 !32
!32 !32 !32 !32 !32 !35 !32 !62 !60 !32 !115 !119 !97 !112 !10 !9 !112 !111 !112 !95
!101 !97 !120 !10 !9 !112 !117 !115 !104 !95 !101 !98 !120 !10 !0
:string_113 !69 !82 !82 !79 !82 !32 !37 !100 !46 !37 !100 !58 !32 !116 !111 !107 !101
!110 !32 !124 !37 !115 !124 !32 !110 !111 !116 !32 !115 !117 !112 !112 !111 !114 !116 !101 !100
!10 !0
:string_114 !10 !58 !69 !76 !70 !95 !100 !97 !116 !97 !10 !10 !0
:string_115 !58 !83 !89 !83 !95 !77 !65 !76 !76 !79 !67 !32 !78 !85 !76 !76 !10
!0
:string_116 ":string_%d "
:string_117 !34 !37 !115 !34 !0
:string_118 "!%u%s"
:string_119 !10 !32 !32 !0
:string_120 "!0"
:string_121 ":g_%s"
:string_122 "%sNULL"
:string_123 !10 !9 !0
:string_124 ":static_%d_%s"
:string_125 !10 !58 !69 !76 !70 !95 !101 !110 !100 !10 !0
:string_126 "void"
:string_127 "const"
:string_128 "int"
:string_129 "do"
:string_130 "break"
:string_131 "continue"
:string_132 "if"
:string_133 "else"
:string_134 "return"
:string_135 "goto"
:string_136 "static"
:string_137 "char"
:string_138 "=:"
:string_139 "?1"
:string_140 "?2"
:string_141 "=1"
:string_142 "=2"
:string_143 "()"
:string_144 "/s"
:string_145 "%s"
:string_146 "=="
:string_147 "!="
:string_148 "<="
:string_149 ">="
:string_150 "<s"
:string_151 "<=s"
:string_152 ">s"
:string_153 ">=s"
:string_154 "<<"
:string_155 ">>"
:string_156 "&&"
:string_157 "||"
:string_158 "->"
:string_159 "><"
:string_160 "-p"
:g___sys_stdin
NULL NULL
:g___sys_stdout
NULL NULL
:g___sys_stderr
NULL NULL
:g_stdin
NULL
:g_stdout
NULL
:g_stderr
NULL
:g_errno
NULL
:g_LINE_MACRO_OUTPUT_FORMAT_GCC
NULL
:g_LINE_MACRO_OUTPUT_FORMAT_NONE
NULL
:g_LINE_MACRO_OUTPUT_FORMAT_STD
NULL
:g_LINE_MACRO_OUTPUT_FORMAT_P10
NULL
:g__sys_env
NULL
:g_fin
NULL
:g_fout
NULL
:g_ferr
NULL
:g_cur_char
NULL
:g_cur_char_line
NULL
:g_cur_char_column
NULL
:g_sym
NULL
:g_token
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL
:g_token_len
NULL
:g_int_value
NULL
:g_cur_line
NULL
:g_cur_column
NULL
:g_keywords
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
:g_symbols
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL
:g_error
NULL
:g_idents
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
:g_nr_idents
NULL
:g_pos
NULL
:g_statics
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL
:g_nr_statics
NULL
:g_strings
NULL
:g_nesting_depth
NULL
:g_nesting_nr_vars
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL
:g_nesting_pos
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL
:g_nesting_type
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL
:g_nesting_id
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL NULL NULL NULL NULL
NULL NULL NULL NULL
:ELF_end
DEFINE pop_eax 58
DEFINE pop_ebx 5B
DEFINE pop_ecx 59
DEFINE pop_edx 5A
DEFINE pop_edi 5F
DEFINE push_eax 50
DEFINE push_ebx 53
DEFINE push_edi 57
DEFINE mov_eax, B8
DEFINE mov_ebx, BB
DEFINE mov_edx, BA
DEFINE mov_eax,[DWORD] 8B05
DEFINE mov_ebx,[DWORD] 8B1D
DEFINE mov_eax,ebx 89D8
DEFINE mov_eax,edx 89D0
DEFINE mov_edx,eax 89C2
DEFINE mov_ebx,eax 89C3
DEFINE mov_ebx,esp 89E3
DEFINE mov_ecx,eax 89C1
DEFINE mov_ebp,eax 89C5
DEFINE mov_al,[eax] 8A00
DEFINE mov_ax,[eax] 668B00
DEFINE mov_eax,[eax] 8B00
DEFINE mov_ebx,[ebp] 8B5D00
DEFINE mov_eax,[ebp+DWORD] 8B85
DEFINE lea_eax,[ebp+DWORD] 8D85
DEFINE lea_ecx,[ebp+DWORD] 8D8D
DEFINE mov_[DWORD],eax A3
DEFINE mov_[DWORD],ebx 891D
DEFINE mov_[ecx],eax 8901
DEFINE mov_[eax],ebx 8918
DEFINE mov_[ebx],al 8803
DEFINE mov_[ebx],ax 668903
DEFINE mov_[ebx],eax 8903
DEFINE mov_[ebp],eax 894500
DEFINE mov_[eax],bl 8818
DEFINE add_eax, 81C0
DEFINE add_eax,ebx 01D8
DEFINE add_ebx,eax 01C3
DEFINE sub_ebx,eax 29C3
DEFINE shl_eax,cl D3E0
DEFINE shr_eax,cl D3E8
DEFINE cdq 99
DEFINE mul_ebx F7E3
DEFINE div_ebx F7F3
DEFINE idiv_ebx F7FB
DEFINE and_eax, 25
DEFINE and_eax,ebx 21D8
DEFINE or_eax,ebx 09D8
DEFINE xor_eax,ebx 31D8
DEFINE not_eax F7D0
DEFINE add_ebp, 81C5
DEFINE sub_ebp, 81ED
DEFINE cmp_eax_ebx 39C3
DEFINE seta_al 0F97C0
DEFINE setae_al 0F93C0
DEFINE setb_al 0F92C0
DEFINE setbe_al 0F96C0
DEFINE sete_al 0F94C0
DEFINE setle_al 0F9EC0
DEFINE setl_al 0F9CC0
DEFINE setge_al 0F9DC0
DEFINE setg_al 0F9FC0
DEFINE setne_al 0F95C0
DEFINE movsx_eax,al 0FBEC0
DEFINE movzx_eax,al 0FB6C0
DEFINE test_eax,eax 85C0
DEFINE jmp E9
DEFINE je 0F84
DEFINE jne 0F85
DEFINE jle 0F8E
DEFINE call E8
DEFINE call_eax FFD0
DEFINE ret C3
DEFINE int_80 CD80
DEFINE NULL 00000000
:ELF_text
:_start
mov_eax, %45 # the Syscall # for SYS_BRK
mov_ebx, %0 # Get current brk
int_80 # Let the kernel do the work
mov_[DWORD],eax &SYS_MALLOC # Set our malloc pointer
# allocate memory for the second stack
mov_eax, %100000
push_eax # (sys_malloc assums address)
call %f_sys_malloc
mov_ebp,eax
# setup argc and argv for the main function
mov_edx,eax
pop_eax
mov_ebx,esp
push_eax
push_ebx
mov_eax,edx
#call main
call %f_main
# program completed Successfully
mov_ebx,eax # All is well
mov_eax, %1 # put the exit syscall number in eax
int_80 # Call it a good day
# These sys_ function follow the same calling conventions
# as all the other functions. To access the arguments on the stack
# the return address is stored in the edi address (which is only possible
# because these functions do not call other function) and the function
# address (which is stored in the eax register, the top of the stack)
# needs to be popped as well.
:f_sys_int80
pop_edi # Save return address from the stack
pop_edx # Get the arguments from the stack
pop_ecx
pop_ebx
pop_eax
int_80 # call the Kernel
push_edi # restore return address to the stack
ret
:f_sys_malloc
pop_edi
pop_eax
mov_ebx,[DWORD] &SYS_MALLOC # Using the current pointer
add_ebx,eax # Request the number of desired bytes
mov_eax, %45 # the Syscall # for SYS_BRK
int_80 # call the Kernel
mov_eax,[DWORD] &SYS_MALLOC # Return pointer
mov_[DWORD],ebx &SYS_MALLOC # Update pointer
push_edi
ret
:SYS_MALLOC
NULL
void sys_int80 ;
void sys_malloc ;
void exit
{
int result result =:
# stdlib.c 8
1 result ? 0 0 sys_int80 () ;
0 return
}
const s1_m_fh 0
const s1_m_at_eof 4
int 2 __sys_stdin
int 2 __sys_stdout
int 2 __sys_stderr
int stdin
int stdout
int stderr
void memcpy
{
int n n =:
int src src =:
int dest dest =:
int d d dest ? = ;
int s s src ? = ;
# stdlib.c 34
{
int i i 0 = ;
do
{
i ? n ? <s ! if { break }
# stdlib.c 35
d ? i ? + s ? i ? + ?1 char =1 ;
i $ ? 1 + = 1 - ;
}
}
# stdlib.c 36
dest ? return
0 return
}
void memmove
{
int n n =:
int src src =:
int dest dest =:
int d d dest ? = ;
int s s src ? = ;
# stdlib.c 43
1 if
{
# stdlib.c 44
# stdlib.c 45
{
int i i 0 = ;
do
{
i ? n ? < ! if { break }
# stdlib.c 46
d ? i ? + s ? i ? + ?1 char =1 ;
i $ ? 1 + = 1 - ;
}
}
}
else
{
# stdlib.c 48
src ? dest ? < if
{
# stdlib.c 49
int j j n ? 1 - = ;
# stdlib.c 51
{
int i i 0 = ;
do
{
i ? n ? < ! if { break }
# stdlib.c 52
d ? j ? + s ? j ? + ?1 char =1 ;
i $ ? 1 + = 1 - ; j $ ? 1 - = 1 + ;
}
}
}
}
# stdlib.c 54
dest ? return
0 return
}
void memset
{
int n n =:
int c c =:
int s s =:
int p p s ? = ;
# stdlib.c 60
{
int i i 0 = ;
do
{
i ? n ? < ! if { break }
# stdlib.c 61
p ? i ? + c ? =1 ;
i $ ? 1 + = 1 - ;
}
}
# stdlib.c 62
s ? return
0 return
}
void memcmp
{
int n n =:
int s2 s2 =:
int s1 s1 =:
int p1 p1 s1 ? = ;
int p2 p2 s2 ? = ;
# stdlib.c 69
{
int i i 0 = ;
do
{
i ? n ? < ! if { break }
# stdlib.c 70
int result result p1 ? ?1 char p2 ? ?1 char - = ;
# stdlib.c 72
result ? 0 != if
{
# stdlib.c 73
result ? return
}
i $ ? 1 + = 1 - ; p1 $ ? 1 + = 1 - ; p2 $ ? 1 + = 1 - ;
}
}
# stdlib.c 75
0 return
0 return
}
void strlen
{
int s s =:
int len len 0 = ;
# stdlib.c 81
{
do
{
s ? ?1 char 0 != ! if { break }
# stdlib.c 82
len $ ? 1 + = 1 - ;
s $ ? 1 + = 1 - ;
}
}
# stdlib.c 83
len ? return
0 return
}
void strcpy
{
int src src =:
int dest dest =:
int result result dest ? = ;
# stdlib.c 89
do
{
src ? ?1 char 0 != ! if { break }
# stdlib.c 90
dest $ ? 1 + = 1 - src $ ? 1 + = 1 - ?1 char =1 ;
}
# stdlib.c 91
dest ? 0 =1 ;
# stdlib.c 92
result ? return
0 return
}
void strncpy
{
int n n =:
int src src =:
int dest dest =:
int d d dest ? = ;
int s s src ? = ;
# stdlib.c 99
{
int i i 0 = ;
do
{
i ? n ? <s ! if { break }
# stdlib.c 100
# stdlib.c 101
d ? i ? + s ? i ? + ?1 char =1 ;
# stdlib.c 102
s ? i ? + ?1 char 0 == if
{
# stdlib.c 103
break
}
i $ ? 1 + = 1 - ;
}
}
# stdlib.c 105
dest ? return
0 return
}
void strcat
{
int src src =:
int dest dest =:
# stdlib.c 110
dest ? dest ? strlen () + src ? strcpy () ;
# stdlib.c 111
dest ? return
0 return
}
void strchr
{
int c c =:
int s s =:
# stdlib.c 116
{
do
{
s ? ?1 char 0 != ! if { break }
# stdlib.c 117
s ? ?1 char c ? == if
{
# stdlib.c 118
s ? return
}
s $ ? 1 + = 1 - ;
}
}
# stdlib.c 119
c ? 0 == if { s ? } else { 0 } return
0 return
}
void strrchr
{
int c c =:
int s s =:
int n n s ? strlen () = ;
# stdlib.c 125
{
int i i n ? = ;
do
{
i ? 0 >=s ! if { break }
# stdlib.c 126
s ? i ? + ?1 char c ? == if
{
# stdlib.c 127
s ? i ? + return
}
i $ ? 1 - = 1 + ;
}
}
# stdlib.c 128
0 return
0 return
}
void strcmp
{
int s2 s2 =:
int s1 s1 =:
# stdlib.c 133
{
do
{
# stdlib.c 134
int result result s1 ? ?1 char s2 ? ?1 char - = ;
# stdlib.c 136
result ? 0 != || { s1 ? ?1 char 0 == } if
{
# stdlib.c 137
result ? return
}
# stdlib.c 138
s1 $ ? 1 + = 1 - ;
# stdlib.c 139
s2 $ ? 1 + = 1 - ;
}
}
# stdlib.c 141
0 return
0 return
}
void strncmp
{
int n n =:
int s2 s2 =:
int s1 s1 =:
# stdlib.c 146
{
do
{
n ? 0 > ! if { break }
# stdlib.c 147
int result result s1 ? ?1 char s2 ? ?1 char - = ;
# stdlib.c 149
result ? 0 != || { s1 ? ?1 char 0 == } if
{
# stdlib.c 150
result ? return
}
# stdlib.c 151
s1 $ ? 1 + = 1 - ;
# stdlib.c 152
s2 $ ? 1 + = 1 - ;
n $ ? 1 - = 1 + ;
}
}
# stdlib.c 154
0 return
0 return
}
void strstr
{
int needle needle =:
int haystack haystack =:
int n n needle ? strlen () = ;
# stdlib.c 160
{
do
{
haystack ? ?1 char 0 != ! if { break }
# stdlib.c 161
haystack ? needle ? n ? strncmp () 0 == if
{
# stdlib.c 162
haystack ? return
}
haystack $ ? 1 + = 1 - ;
}
}
# stdlib.c 163
0 return
0 return
}
void strtoul
{
int base base =:
int endptr endptr =:
int nptr nptr =:
# stdlib.c 169
base ? 0 == if
{
# stdlib.c 170
# stdlib.c 171
base 10 = ;
# stdlib.c 172
nptr ? ?1 char 48 == if
{
# stdlib.c 173
# stdlib.c 174
base 8 = ;
# stdlib.c 175
nptr $ ? 1 + = 1 - ;
# stdlib.c 176
nptr ? ?1 char 120 == || { nptr ? ?1 char 88 == } if
{
# stdlib.c 177
# stdlib.c 178
base 16 = ;
# stdlib.c 179
nptr $ ? 1 + = 1 - ;
}
}
}
int result result 0 = ;
int sub_10 sub_10 48 base ? 10 <s if { base ? } else { 10 } + =1 ;
# stdlib.c 185
{
do
{
# stdlib.c 186
# stdlib.c 187
48 nptr ? ?1 char <=s && { nptr ? ?1 char sub_10 ?1 char <s } if
{
# stdlib.c 188
result base ? result ? * nptr ? ?1 char + 48 - = ;
}
else
{
# stdlib.c 189
97 nptr ? ?1 char <=s && { nptr ? ?1 char 97 base ? + 10 - <s } if
{
# stdlib.c 190
result base ? result ? * nptr ? ?1 char + 97 - 10 + = ;
}
else
{
# stdlib.c 191
65 nptr ? ?1 char <=s && { nptr ? ?1 char 65 base ? + 10 - <s } if
{
# stdlib.c 192
result base ? result ? * nptr ? ?1 char + 65 - 10 + = ;
}
else
{
# stdlib.c 194
break
}
}
}
nptr $ ? 1 + = 1 - ;
}
}
# stdlib.c 196
endptr ? 0 != if
{
# stdlib.c 197
endptr ? nptr ? = ;
}
# stdlib.c 198
result ? return
0 return
}
void strtol
{
int base base =:
int endptr endptr =:
int nptr nptr =:
int sign sign 1 = ;
# stdlib.c 204
nptr ? ?1 char 45 == if
{
# stdlib.c 205
# stdlib.c 206
sign 4294967295 = ;
# stdlib.c 207
nptr $ ? 1 + = 1 - ;
}
# stdlib.c 209
sign ? nptr ? endptr ? base ? strtoul () * return
0 return
}
void strtoll
{
int base base =:
int endptr endptr =:
int nptr nptr =:
# stdlib.c 214
nptr ? endptr ? base ? strtol () return
0 return
}
void strtoull
{
int base base =:
int endptr endptr =:
int nptr nptr =:
# stdlib.c 219
nptr ? endptr ? base ? strtoul () return
0 return
}
void strtof
{
int endptr endptr =:
int str str =:
# stdlib.c 225
endptr ? str ? = ;
# stdlib.c 226
0 return
0 return
}
void malloc
{
int size size =:
# stdlib.c 231
size size ? 3 + 3 ~ & = ;
int result result size ? 4 + sys_malloc () = ;
# stdlib.c 233
result ? size ? = ;
# stdlib.c 234
result $ ? 4 + = 4 - ;
# stdlib.c 235
result ? return
0 return
}
void realloc
{
int size size =:
int ptr ptr =:
int result result size ? malloc () = ;
# stdlib.c 241
ptr ? 0 != if
{
# stdlib.c 242
int old_ptr old_ptr ptr ? = ;
int old_size old_size old_ptr ? 4294967295 4 * + ? 4 /s = ;
# stdlib.c 245
{
int i i 0 = ;
do
{
i ? old_size ? <s ! if { break }
# stdlib.c 246
result ? i ? 4 * + old_ptr ? i ? 4 * + ? = ;
i $ ? 1 + = 1 - ;
}
}
}
# stdlib.c 248
result ? return
0 return
}
void calloc
{
int S S =:
int N N =:
int len len N ? S ? * = ;
int r r len ? malloc () = ;
# stdlib.c 255
{
int i i 0 = ;
do
{
i ? len ? <s ! if { break }
# stdlib.c 256
r ? i ? + 0 =1 ;
i $ ? 1 + = 1 - ;
}
}
# stdlib.c 257
r ? return
0 return
}
void free
{
int ptr ptr =:
# stdlib.c 263
0 return
0 return
}
void fwrite
{
int stream stream =:
int nmemb nmemb =:
int size size =:
int ptr ptr =:
# stdlib.c 268
4 stream ->s1_m_fh ? ptr ? size ? nmemb ? * sys_int80 () return
0 return
}
void fputc
{
int stream stream =:
int c c =:
# stdlib.c 273
4 stream ->s1_m_fh ? c 1 sys_int80 () return
0 return
}
void fputs
{
int stream stream =:
int s s =:
# stdlib.c 278
4 stream ->s1_m_fh ? s ? s ? strlen () sys_int80 () return
0 return
}
void __sys_printf
{
int args args =:
int format format =:
int len len =:
int trg trg =:
int stream stream =:
int 5 buffer
int l l 0 = ;
int s
int cnt cnt 0 = ;
int org_format org_format format ? = ;
# stdlib.c 292
{
do
{
# stdlib.c 293
# stdlib.c 294
len ? 0 == if
{
# stdlib.c 295
break
}
# stdlib.c 296
l ? 0 >s if
{
# stdlib.c 297
# stdlib.c 298
stream ? 0 != if
{
# stdlib.c 299
s ? ?1 char stream ? fputc () ;
}
else
{
# stdlib.c 300
trg ? 0 != if
{
# stdlib.c 301
trg $ ? 1 + = 1 - s ? ?1 char =1 ;
}
}
# stdlib.c 302
s $ ? 1 + = 1 - ;
# stdlib.c 303
l $ ? 1 - = 1 + ;
# stdlib.c 304
cnt $ ? 1 + = 1 - ;
# stdlib.c 305
len ? 0 >s if
{
# stdlib.c 306
len $ ? 1 - = 1 + ;
}
}
# stdlib.c 308
l ? 0 == if
{
# stdlib.c 309
# stdlib.c 310
format ? ?1 char 0 == if
{
# stdlib.c 311
break
}
# stdlib.c 312
s buffer = ;
# stdlib.c 313
l 1 = ;
# stdlib.c 314
format ? ?1 char 37 == if
{
# stdlib.c 315
# stdlib.c 316
format $ ? 1 + = 1 - ;
# stdlib.c 317
format ? ?1 char 37 == if
{
# stdlib.c 318
buffer 0 + 37 =1 ;
}
else
{
# stdlib.c 320
int modifier modifier 0 = ;
int sign sign 1 = ;
# stdlib.c 323
format ? ?1 char 45 == if
{
# stdlib.c 324
# stdlib.c 325
sign 4294967295 = ;
# stdlib.c 326
format $ ? 1 + = 1 - ;
}
# stdlib.c 328
do
{
48 format ? ?1 char <=s && { format ? ?1 char 57 <=s } ! if { break }
# stdlib.c 329
# stdlib.c 330
modifier 10 modifier ? * format ? ?1 char + 48 - = ;
# stdlib.c 331
format $ ? 1 + = 1 - ;
}
# stdlib.c 333
format ? ?1 char 115 == if
{
# stdlib.c 334
# stdlib.c 335
s args $ ? 4 + = 4 - ? = ;
# stdlib.c 336
l s ? strlen () = ;
}
else
{
# stdlib.c 338
format ? ?1 char 100 == if
{
# stdlib.c 339
int v v args ? ? = ;
int b b 20 = ;
# stdlib.c 342
v ? 0 == if
{
# stdlib.c 343
buffer b $ ? 1 - = + 48 =1 ;
}
else
{
# stdlib.c 345
# stdlib.c 346
v ? 0 <s if
{
# stdlib.c 346
v 0 v ? - = ;
}
# stdlib.c 347
{
do
{
v ? 0 >s ! if { break }
# stdlib.c 348
buffer b $ ? 1 - = + 48 v ? 10 %s + =1 ;
v v ? 10 /s = ;
}
}
# stdlib.c 349
args ? ? 0 <s if
{
# stdlib.c 350
buffer b $ ? 1 - = + 45 =1 ;
}
}
# stdlib.c 352
l 20 b ? - = ;
# stdlib.c 353
modifier ? 0 >s if
{
# stdlib.c 354
# stdlib.c 355
modifier ? l ? >s if
{
# stdlib.c 356
# stdlib.c 357
sign ? 4294967295 == if
{
# stdlib.c 358
# stdlib.c 359
{
int i i 20 modifier ? - = ;
do
{
i ? 20 <s ! if { break }
# stdlib.c 360
buffer i ? + b ? 20 <s if { buffer b $ ? 1 + = 1 - + ?1 char } else { 32 } =1 ;
i $ ? 1 + = 1 - ;
}
}
# stdlib.c 361
b 20 modifier ? - = ;
}
else
{
# stdlib.c 364
{
do
{
l ? modifier ? <s ! if { break }
# stdlib.c 365
buffer b $ ? 1 - = + 32 =1 ;
l $ ? 1 + = 1 - ;
}
}
}
}
# stdlib.c 367
l modifier ? = ;
}
# stdlib.c 369
s buffer b ? + = ;
# stdlib.c 370
args $ ? 4 + = 4 - ;
}
else
{
# stdlib.c 372
format ? ?1 char 117 == if
{
# stdlib.c 373
int v v args $ ? 4 + = 4 - ? = ;
# stdlib.c 375
v ? 0 == if
{
# stdlib.c 376
buffer 0 + 48 =1 ;
}
else
{
# stdlib.c 378
# stdlib.c 379
l 20 = ;
# stdlib.c 380
{
do
{
v ? 0 > ! if { break }
# stdlib.c 381
buffer l $ ? 1 - = + 48 v ? 10 % + =1 ;
v v ? 10 / = ;
}
}
# stdlib.c 382
s buffer l ? + = ;
# stdlib.c 383
l 20 l ? - = ;
}
}
else
{
# stdlib.c 386
format ? ?1 char 120 == || { format ? ?1 char 112 == } if
{
# stdlib.c 387
int v v args $ ? 4 + = 4 - ? = ;
# stdlib.c 389
v ? 0 == if
{
# stdlib.c 390
buffer 0 + 48 =1 ;
}
else
{
# stdlib.c 392
# stdlib.c 393
l 20 = ;
# stdlib.c 394
{
do
{
v ? 0 != ! if { break }
# stdlib.c 395
buffer l $ ? 1 - = + v ? 15 & 10 < if { 48 } else { 97 10 - } v ? 15 & + =1 ;
v $ ? 4 >> = ;
}
}
# stdlib.c 396
s buffer l ? + = ;
# stdlib.c 397
l 20 l ? - = ;
}
}
else
{
# stdlib.c 400
format ? ?1 char 99 == if
{
# stdlib.c 401
# stdlib.c 402
buffer 0 + args $ ? 4 + = 4 - ? =1 ;
}
else
{
# stdlib.c 405
# stdlib.c 406
"__sys_printf %" stderr ? fputs () ;
# stdlib.c 407
format ? ?1 char stderr ? fputc () ;
# stdlib.c 408
" " stderr ? fputs () ;
# stdlib.c 409
org_format ? stderr ? fputs () ;
# stdlib.c 410
"\n" stderr ? fputs () ;
# stdlib.c 411
1 exit () ;
}
}
}
}
}
}
}
else
{
# stdlib.c 416
# stdlib.c 417
buffer 0 + format ? ?1 char =1 ;
# stdlib.c 418
s buffer = ;
# stdlib.c 419
l 1 = ;
}
# stdlib.c 421
format $ ? 1 + = 1 - ;
}
}
}
# stdlib.c 424
len ? 0 != && { trg ? 0 != } if
{
# stdlib.c 425
trg ? 0 =1 ;
}
# stdlib.c 426
cnt ? return
0 return
}
void va_start ;
void va_end
{
int ap ap =:
0 return
}
void fprintf
{
int __var_args __var_args =:
int format format =:
int stream stream =:
int ap
# stdlib.c 435
ap __var_args ? = ;
# stdlib.c 436
stream ? 0 4294967295 format ? ap ? __sys_printf () return
0 return
}
void printf
{
int __var_args __var_args =:
int format format =:
int ap
# stdlib.c 442
ap __var_args ? = ;
# stdlib.c 443
stdout ? 0 4294967295 format ? ap ? __sys_printf () return
0 return
}
void sprintf
{
int __var_args __var_args =:
int format format =:
int str str =:
int ap
# stdlib.c 449
ap __var_args ? = ;
# stdlib.c 450
0 str ? 4294967295 format ? ap ? __sys_printf () return
0 return
}
void snprintf
{
int __var_args __var_args =:
int format format =:
int size size =:
int str str =:
int ap
# stdlib.c 455
ap __var_args ? = ;
# stdlib.c 456
0 str ? size ? format ? ap ? __sys_printf () return
0 return
}
void vsnprintf
{
int ap ap =:
int format format =:
int size size =:
int str str =:
# stdlib.c 461
0 str ? size ? format ? ap ? __sys_printf () return
0 return
}
void open
{
int __var_args __var_args =:
int flag flag =:
int filename filename =:
int mode mode 0 = ;
# stdlib.c 477
flag ? 1 & 0 != if
{
# stdlib.c 478
int ap
# stdlib.c 480
ap __var_args ? = ;
# stdlib.c 481
mode ap ? 0 4 * + ? = ;
}
# stdlib.c 483
5 filename ? flag ? mode ? sys_int80 () return
0 return
}
void close
{
int fd fd =:
# stdlib.c 488
6 fd ? 0 0 sys_int80 () return
0 return
}
void read
{
int count count =:
int buf buf =:
int fd fd =:
# stdlib.c 493
3 fd ? buf ? count ? sys_int80 () return
0 return
}
void lseek
{
int whence whence =:
int offset offset =:
int fd fd =:
# stdlib.c 498
19 fd ? offset ? whence ? sys_int80 () return
0 return
}
void fopen
{
int mode mode =:
int pathname pathname =:
int rw rw mode ? ?1 char =1 ;
# stdlib.c 504
mode ? ?1 char 114 == || { mode ? ?1 char 119 == } if
{
# stdlib.c 505
mode $ ? 1 + = 1 - ;
}
int bin bin 0 = ;
# stdlib.c 507
mode ? ?1 char 98 == if
{
# stdlib.c 508
# stdlib.c 509
bin 1 = ;
# stdlib.c 510
mode $ ? 1 + = 1 - ;
}
int plus plus 0 = ;
# stdlib.c 513
mode ? ?1 char 43 == if
{
# stdlib.c 514
# stdlib.c 515
plus 1 = ;
# stdlib.c 516
mode $ ? 1 + = 1 - ;
}
# stdlib.c 518
mode ? ?1 char 0 != if
{
# stdlib.c 519
# stdlib.c 520
"Mode %s should be 'r/w(b)(+)', 'w', or 'wb'\n" { int 1 __var_args __var_args mode ? = ; __var_args printf () } ;
# stdlib.c 521
0 return
}
int open_mode open_mode rw ?1 char 114 == if { plus ? 1 == if { 2 } else { 0 } } else { plus ? 1 == if { 2 } else { 1 } 64 | 512 | } = ;
int fh fh 5 pathname ? open_mode ? 511 sys_int80 () = ;
# stdlib.c 528
fh ? 0 <s if
{
# stdlib.c 529
# stdlib.c 530
"fopen %s %s returned %d\n" { int 3 __var_args __var_args pathname ? = ; __var_args 4 + mode ? = ; __var_args 8 + fh ? = ; __var_args printf () } ;
# stdlib.c 531
0 return
}
int f f 8 malloc () = ;
# stdlib.c 534
f ->s1_m_fh fh ? = ;
# stdlib.c 535
f ->s1_m_at_eof 0 = ;
# stdlib.c 536
f ? return
0 return
}
void fdopen
{
int mode mode =:
int fd fd =:
int f f 8 malloc () = ;
# stdlib.c 542
f ->s1_m_fh fd ? = ;
# stdlib.c 543
f ->s1_m_at_eof 0 = ;
# stdlib.c 544
f ? return
0 return
}
void fclose
{
int stream stream =:
# stdlib.c 549
6 stream ->s1_m_fh ? 0 0 sys_int80 () return
0 return
}
void fflush
{
int stream stream =:
# stdlib.c 555
0 return
0 return
}
void fseek
{
int whence whence =:
int offset offset =:
int stream stream =:
# stdlib.c 560
stream ->s1_m_fh ? offset ? whence ? lseek () return
0 return
}
void ftell
{
int stream stream =:
# stdlib.c 565
stream ->s1_m_fh ? 0 1 lseek () return
0 return
}
void fread
{
int stream stream =:
int nmemb nmemb =:
int size size =:
int ptr ptr =:
int s s ptr ? = ;
# stdlib.c 571
{
int i i 0 = ;
do
{
i ? nmemb ? <s ! if { break }
# stdlib.c 572
int r r stream ->s1_m_fh ? s ? size ? read () = ;
# stdlib.c 574
r ? size ? < if
{
# stdlib.c 575
i ? return
}
# stdlib.c 576
s $ ? size ? + = ;
i $ ? 1 + = 1 - ;
}
}
# stdlib.c 578
nmemb ? return
0 return
}
void lseek
{
int whence whence =:
int offset offset =:
int fd fd =:
# stdlib.c 587
19 fd ? offset ? whence ? sys_int80 () return
0 return
}
void feof
{
int stream stream =:
# stdlib.c 592
stream ->s1_m_at_eof ? return
0 return
}
void fgetc
{
int stream stream =:
# stdlib.c 597
stream ->s1_m_at_eof ? if
{
# stdlib.c 598
4294967295 return
}
int ch
int ret ret 3 stream ->s1_m_fh ? ch 1 sys_int80 () = ;
# stdlib.c 601
ret ? 0 <=s if
{
# stdlib.c 602
# stdlib.c 603
stream ->s1_m_at_eof 1 = ;
# stdlib.c 604
4294967295 return
}
# stdlib.c 606
ch ?1 return
0 return
}
void ldexp
{
int exp exp =:
int x x =:
int result result x ? = ;
# stdlib.c 613
{
int i i 1 = ;
do
{
i ? exp ? <s ! if { break }
# stdlib.c 614
result $ ? x ? * = ;
i $ ? 1 + = 1 - ;
}
}
# stdlib.c 615
result ? return
0 return
}
void time
{
int tloc tloc =:
# stdlib.c 621
stderr ? "TODO time\n" 0 fprintf () ;
# stdlib.c 621
1 exit () ;
0 return
}
const s2_m_tm_sec 0
const s2_m_tm_min 4
const s2_m_tm_hour 8
const s2_m_tm_mday 12
const s2_m_tm_mon 16
const s2_m_tm_year 20
const s2_m_tm_wday 24
const s2_m_tm_yday 28
const s2_m_tm_isdst 32
void localtime
{
int timep timep =:
# stdlib.c 638
stderr ? "TODO localtime\n" 0 fprintf () ;
# stdlib.c 638
1 exit () ;
0 return
}
const s3_m_tv_sec 0
const s3_m_tv_usec 4
const s4_m_tz_minuteswest 0
const s4_m_tz_dsttime 4
void gettimeofday
{
int tz tz =:
int tv tv =:
# stdlib.c 651
0 return
0 return
}
int errno
int LINE_MACRO_OUTPUT_FORMAT_GCC
int LINE_MACRO_OUTPUT_FORMAT_NONE
int LINE_MACRO_OUTPUT_FORMAT_STD
int LINE_MACRO_OUTPUT_FORMAT_P10
void write
{
int count count =:
int buf buf =:
int fd fd =:
# stdlib.c 667
4 fd ? buf ? count ? sys_int80 () return
0 return
}
void fileno
{
int stream stream =:
# stdlib.c 672
stream ->s1_m_fh ? return
0 return
}
void getcwd
{
int size size =:
int buf buf =:
# stdlib.c 681
183 buf ? size ? 0 sys_int80 () ;
# stdlib.c 682
buf ? return
0 return
}
int _sys_env
void getenv
{
int name name =:
int len len name ? strlen () = ;
# stdlib.c 690
{
int env env _sys_env ? = ;
do
{
env ? ? 0 != ! if { break }
# stdlib.c 691
env ? ? name ? len ? strncmp () 0 == && { env ? ? len ? + ?1 char 61 == } if
{
# stdlib.c 692
env ? ? len ? + 1 + return
}
env $ ? 4 + = 4 - ;
}
}
0 return
}
void compar ;
void qsort
{
int compar compar =:
int size size =:
int nmemb nmemb =:
int base base =:
# stdlib.c 698
{
int go go 1 = ;
do
{
go ? 1 == ! if { break }
# stdlib.c 699
# stdlib.c 700
go 0 = ;
# stdlib.c 701
{
int i i 0 = ;
do
{
i ? 1 + nmemb ? <s ! if { break }
# stdlib.c 702
int arg1 arg1 base ? i ? size ? * + = ;
int arg2 arg2 base ? 1 i ? + size ? * + = ;
int sign sign arg1 ? arg2 ? compar ? () = ;
# stdlib.c 706
sign ? 0 >s if
{
# stdlib.c 707
# stdlib.c 708
go 1 = ;
# stdlib.c 709
{
int j j 0 = ;
do
{
j ? size ? <s ! if { break }
# stdlib.c 710
j ? 3 + size ? <s if
{
# stdlib.c 711
int h h arg1 ? j ? + ? = ;
# stdlib.c 714
arg1 ? j ? + arg2 ? j ? + ? = ;
# stdlib.c 715
arg2 ? j ? + h ? = ;
# stdlib.c 716
j $ ? 3 + = ;
}
else
{
# stdlib.c 719
int h h arg1 ? j ? + ?1 char =1 ;
# stdlib.c 722
arg1 ? j ? + arg2 ? j ? + ?1 char =1 ;
# stdlib.c 723
arg2 ? j ? + h ?1 char =1 ;
}
j $ ? 1 + = 1 - ;
}
}
}
i $ ? 1 + = 1 - ;
}
}
}
}
0 return
}
void time
{
int tloc tloc =:
# stdlib.c 733
stderr ? "TODO time\n" 0 fprintf () ;
# stdlib.c 733
1 exit () ;
0 return
}
void setjmp
{
int env env =:
# stdlib.c 739
stderr ? "TODO setjmp\n" 0 fprintf () ;
# stdlib.c 739
1 exit () ;
# stdlib.c 740
0 return
0 return
}
void longjmp
{
int val val =:
int env env =:
# stdlib.c 746
stderr ? "TODO longjmp\n" 0 fprintf () ;
# stdlib.c 746
0 exit () ;
# stdlib.c 747
4294967295 exit () ;
0 return
}
void unlink
{
int pathname pathname =:
# stdlib.c 752
10 pathname ? 0 0 sys_int80 () return
0 return
}
void sscanf
{
int __var_args __var_args =:
int format format =:
int str str =:
int ap
# stdlib.c 758
ap __var_args ? = ;
int args_parsed args_parsed 0 = ;
# stdlib.c 762
do
{
format ? ?1 char 0 != ! if { break }
# stdlib.c 763
str ? ?1 char 0 == if
{
# stdlib.c 764
break
}
else
{
# stdlib.c 765
format ? ?1 char 37 == if
{
# stdlib.c 766
# stdlib.c 767
format $ ? 1 + = 1 - ;
# stdlib.c 768
format ? ?1 char 100 == if
{
# stdlib.c 769
# stdlib.c 770
format $ ? 1 + = 1 - ;
int v v 0 = ;
# stdlib.c 772
do
{
48 str ? ?1 char <=s && { str ? ?1 char 57 <=s } ! if { break }
# stdlib.c 773
# stdlib.c 774
v 10 v ? * str ? ?1 char + 48 - = ;
# stdlib.c 775
str $ ? 1 + = 1 - ;
}
# stdlib.c 777
ap ? ? v ? = ;
# stdlib.c 778
ap $ ? 4 + = 4 - ;
# stdlib.c 779
args_parsed $ ? 1 + = 1 - ;
}
else
{
# stdlib.c 782
# stdlib.c 783
stderr ? "sscanf: format %%%c not supported\n" { int 1 __var_args __var_args format ? ?1 char = ; __var_args fprintf () } ;
# stdlib.c 784
1 exit () ;
}
}
else
{
# stdlib.c 788
# stdlib.c 789
format ? ?1 char str ? ?1 char != if
{
# stdlib.c 790
break
}
# stdlib.c 791
format $ ? 1 + = 1 - ;
# stdlib.c 792
str $ ? 1 + = 1 - ;
}
}
}
# stdlib.c 794
args_parsed ? return
0 return
}
void atoi
{
int nptr nptr =:
# stdlib.c 800
stderr ? "TODO atoi\n" 0 fprintf () ;
# stdlib.c 800
1 exit () ;
0 return
}
void remove
{
int pathname pathname =:
# stdlib.c 805
10 pathname ? 0 0 sys_int80 () return
0 return
}
void execvp
{
int argv argv =:
int file file =:
# stdlib.c 811
stderr ? "TODO execvp\n" 0 fprintf () ;
# stdlib.c 811
1 exit () ;
0 return
}
void mkdir
{
int mode mode =:
int pathname pathname =:
# stdlib.c 816
39 pathname ? mode ? 0 sys_int80 () return
0 return
}
void chdir
{
int path path =:
# stdlib.c 821
12 path ? 0 0 sys_int80 () ;
0 return
}
void access
{
int mode mode =:
int filename filename =:
# stdlib.c 826
33 filename ? mode ? 0 sys_int80 () return
0 return
}
void chmod
{
int mode mode =:
int filename filename =:
# stdlib.c 831
15 filename ? mode ? 0 sys_int80 () return
0 return
}
void symlink
{
int linkpath linkpath =:
int target target =:
# stdlib.c 836
83 target ? linkpath ? 0 sys_int80 () return
0 return
}
const s5_m_sysname 0
const s5_m_nodename 4
const s5_m_release 8
const s5_m_version 12
const s5_m_machine 16
void uname
{
int buf buf =:
# stdlib.c 854
109 buf ? 0 0 sys_int80 () return
0 return
}
void execve
{
int env env =:
int argv argv =:
int program program =:
# stdlib.c 859
11 program ? argv ? env ? sys_int80 () return
0 return
}
void fgets
{
int f f =:
int len len =:
int str str =:
# stdlib.c 864
f ? feof () if
{
# stdlib.c 865
0 return
}
# stdlib.c 867
{
int i i 0 = ;
do
{
i ? len ? 1 - <s ! if { break }
# stdlib.c 868
int ch ch f ? fgetc () = ;
# stdlib.c 870
ch ? 0 <s if
{
# stdlib.c 871
# stdlib.c 872
str ? i ? + 0 =1 ;
# stdlib.c 873
break
}
# stdlib.c 875
str ? i ? + ch ? =1 ;
# stdlib.c 876
ch ? 10 == if
{
# stdlib.c 877
# stdlib.c 878
str ? i ? 1 + + 0 =1 ;
# stdlib.c 879
break
}
i $ ? 1 + = 1 - ;
}
}
# stdlib.c 882
str ? return
0 return
}
void eqstr
{
int t t =:
int s s =:
# tcc_cc.c 18
s ? t ? strcmp () 0 == return
0 return
}
void copystr
{
int str str =:
int len len str ? strlen () = ;
int new_str new_str len ? 1 + malloc () = ;
# tcc_cc.c 27
new_str ? str ? strcpy () ;
# tcc_cc.c 29
new_str ? return
0 return
}
void copystrlen
{
int len len =:
int str str =:
int new_str new_str len ? 1 + malloc () = ;
# tcc_cc.c 35
new_str ? str ? len ? 1 + memcpy () ;
# tcc_cc.c 37
new_str ? return
0 return
}
int opt_trace_parser
void char_next_p ;
const s6_m_ch 0
const s6_m_line 4
const s6_m_column 8
const s6_m_filename 12
const s6_m_next 16
const s7_m_base 0
const s7_m__f 20
void file_iterator_next
{
int char_it char_it =:
int it it char_it ? = ;
# tcc_cc.c 83
it ->s7_m_base s6_m_ch + ?1 char 0 == if
{
# tcc_cc.c 84
# tcc_cc.c 85
0 return
}
# tcc_cc.c 87
it ->s7_m_base s6_m_ch + ?1 char 10 == if
{
# tcc_cc.c 88
# tcc_cc.c 89
it ->s7_m_base s6_m_line + it ->s7_m_base s6_m_line + ? 1 + = ;
# tcc_cc.c 90
it ->s7_m_base s6_m_column + 0 = ;
}
# tcc_cc.c 92
it ->s7_m_base s6_m_column + it ->s7_m_base s6_m_column + ? 1 + = ;
# tcc_cc.c 93
it ->s7_m__f ? 0 == if
{
# tcc_cc.c 94
# tcc_cc.c 95
it ->s7_m_base s6_m_ch + 0 =1 ;
# tcc_cc.c 96
0 return
}
# tcc_cc.c 98
it ->s7_m_base s6_m_ch + it ->s7_m__f ? fgetc () =1 ;
# tcc_cc.c 99
it ->s7_m__f ? feof () if
{
# tcc_cc.c 100
# tcc_cc.c 101
it ->s7_m_base s6_m_ch + 0 =1 ;
# tcc_cc.c 102
it ->s7_m__f ? fclose () ;
# tcc_cc.c 103
it ->s7_m__f 0 = ;
}
else
{
# tcc_cc.c 105
it ->s7_m_base s6_m_ch + ?1 char 13 == if
{
# tcc_cc.c 106
# tcc_cc.c 107
char_it ? file_iterator_next () ;
}
}
0 return
}
void new_file_iterator
{
int fn fn =:
int it it 24 malloc () = ;
# tcc_cc.c 114
it ->s7_m__f fn ? "r" fopen () = ;
# tcc_cc.c 115
it ->s7_m_base s6_m_ch + 10 =1 ;
# tcc_cc.c 116
it ->s7_m__f ? 0 == if
{
# tcc_cc.c 117
# tcc_cc.c 118
it ->s7_m_base s6_m_ch + 0 =1 ;
}
# tcc_cc.c 120
it ->s7_m_base s6_m_filename + fn ? copystr () = ;
# tcc_cc.c 121
it ->s7_m_base s6_m_line + 0 = ;
# tcc_cc.c 122
it ->s7_m_base s6_m_column + 0 = ;
# tcc_cc.c 123
it ->s7_m_base s6_m_next + file_iterator_next = ;
# tcc_cc.c 124
it ->s7_m_base file_iterator_next () ;
# tcc_cc.c 125
it ? return
0 return
}
const s8_m_base 0
const s8_m__source_it 20
const s8_m__a 24
void line_splice_iterator_next
{
int char_it char_it =:
int it it char_it ? = ;
int _source_it_next
# tcc_cc.c 149
_source_it_next it ->s8_m__source_it ->s6_m_next ? = ;
# tcc_cc.c 151
it ->s8_m__a ?1 char 0 == if
{
# tcc_cc.c 152
# tcc_cc.c 153
it ->s8_m_base s6_m_ch + 0 =1 ;
# tcc_cc.c 154
0 return
}
# tcc_cc.c 156
it ->s8_m_base s6_m_ch + it ->s8_m__a ?1 char =1 ;
# tcc_cc.c 157
it ->s8_m_base s6_m_filename + it ->s8_m__source_it ->s6_m_filename ? = ;
# tcc_cc.c 158
it ->s8_m_base s6_m_line + it ->s8_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 159
it ->s8_m_base s6_m_column + it ->s8_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 160
it ->s8_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 161
it ->s8_m__a it ->s8_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 162
do
{
it ->s8_m_base s6_m_ch + ?1 char 92 == && { it ->s8_m__a ?1 char 10 == } ! if { break }
# tcc_cc.c 163
# tcc_cc.c 164
it ->s8_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 165
it ->s8_m_base s6_m_ch + it ->s8_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 166
it ->s8_m_base s6_m_filename + it ->s8_m__source_it ->s6_m_filename ? = ;
# tcc_cc.c 167
it ->s8_m_base s6_m_line + it ->s8_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 168
it ->s8_m_base s6_m_column + it ->s8_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 169
it ->s8_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 170
it ->s8_m__a it ->s8_m__source_it ->s6_m_ch ?1 char =1 ;
}
0 return
}
void new_line_splice_iterator
{
int source_it source_it =:
int it it 28 malloc () = ;
# tcc_cc.c 177
it ->s8_m__source_it source_it ? = ;
# tcc_cc.c 178
it ->s8_m_base s6_m_filename + source_it ->s6_m_filename ? = ;
# tcc_cc.c 179
it ->s8_m_base s6_m_next + line_splice_iterator_next = ;
# tcc_cc.c 180
it ->s8_m__a source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 181
it ->s8_m_base line_splice_iterator_next () ;
# tcc_cc.c 182
it ? return
0 return
}
const s9_m_base 0
const s9_m__source_it 20
const s9_m__a 24
const s9_m__state 28
void comment_strip_iterator_next
{
int char_it char_it =:
int it it char_it ? = ;
int _source_it_next
# tcc_cc.c 209
_source_it_next it ->s9_m__source_it ->s6_m_next ? = ;
# tcc_cc.c 211
it ->s9_m__state ? do
{
$ 0 == if
{
;
# tcc_cc.c 213
goto s0
# tcc_cc.c 214
}
$ 1 == if
{
;
# tcc_cc.c 214
goto s1
# tcc_cc.c 215
}
$ 2 == if
{
;
# tcc_cc.c 215
goto s2
# tcc_cc.c 216
}
$ 3 == if
{
;
# tcc_cc.c 216
goto s3
# tcc_cc.c 217
}
$ 4 == if
{
;
# tcc_cc.c 217
goto s4
# tcc_cc.c 218
}
$ 5 == if
{
;
# tcc_cc.c 218
goto s5
# tcc_cc.c 219
}
$ 6 == if
{
;
# tcc_cc.c 219
goto s6
# tcc_cc.c 220
}
$ 7 == if
{
;
# tcc_cc.c 220
goto s7
# tcc_cc.c 221
}
$ 8 == if
{
;
# tcc_cc.c 221
goto s8
# tcc_cc.c 222
}
$ 9 == if
{
;
# tcc_cc.c 222
goto s9
# tcc_cc.c 223
}
0 if
{
:_default_case_0
# tcc_cc.c 224
break
}
; goto _default_case_0
}
:s0
# tcc_cc.c 226
it ->s9_m__a ?1 char 0 == if
{
# tcc_cc.c 227
# tcc_cc.c 228
it ->s9_m_base s6_m_ch + 0 =1 ;
# tcc_cc.c 229
0 return
}
# tcc_cc.c 231
it ->s9_m_base s6_m_ch + it ->s9_m__a ?1 char =1 ;
# tcc_cc.c 232
it ->s9_m_base s6_m_filename + it ->s9_m__source_it ->s6_m_filename ? = ;
# tcc_cc.c 233
it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 234
it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 235
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 236
it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 237
it ->s9_m_base s6_m_ch + ?1 char 47 == && { it ->s9_m__a ?1 char 47 == || { it ->s9_m__a ?1 char 42 == } } if
{
# tcc_cc.c 238
# tcc_cc.c 239
it ->s9_m__a ?1 char 47 == if
{
# tcc_cc.c 240
# tcc_cc.c 241
do
{
it ->s9_m__a ?1 char 0 != && { it ->s9_m__a ?1 char 10 != } ! if { break }
# tcc_cc.c 242
# tcc_cc.c 243
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 244
it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
}
}
else
{
# tcc_cc.c 248
# tcc_cc.c 249
it ->s9_m_base s6_m_ch + 32 =1 ;
# tcc_cc.c 250
it ->s9_m__state 1 = ;
# tcc_cc.c 250
0 return
:s1
# tcc_cc.c 251
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 252
it ->s9_m_base s6_m_ch + it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 253
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 254
it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 255
do
{
it ->s9_m_base s6_m_ch + ?1 char 0 != && { it ->s9_m_base s6_m_ch + ?1 char 42 != || { it ->s9_m__a ?1 char 47 != } } ! if { break }
# tcc_cc.c 256
# tcc_cc.c 257
it ->s9_m_base s6_m_ch + it ->s9_m__a ?1 char =1 ;
# tcc_cc.c 258
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 259
it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
}
# tcc_cc.c 261
it ->s9_m_base s6_m_ch + ?1 char 0 != if
{
# tcc_cc.c 262
# tcc_cc.c 263
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 264
it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 265
it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 266
it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
}
}
# tcc_cc.c 269
it ->s9_m__state 0 = ;
# tcc_cc.c 270
goto s0
}
# tcc_cc.c 272
it ->s9_m_base s6_m_ch + ?1 char 34 == if
{
# tcc_cc.c 273
# tcc_cc.c 274
it ->s9_m__state 2 = ;
# tcc_cc.c 274
0 return
:s2
# tcc_cc.c 275
it ->s9_m_base s6_m_ch + it ->s9_m__a ?1 char =1 ;
# tcc_cc.c 276
it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 277
it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 279
do
{
it ->s9_m_base s6_m_ch + ?1 char 0 != && { it ->s9_m_base s6_m_ch + ?1 char 34 != } ! if { break }
# tcc_cc.c 280
# tcc_cc.c 281
it ->s9_m_base s6_m_ch + ?1 char 92 == if
{
# tcc_cc.c 282
# tcc_cc.c 283
it ->s9_m__state 3 = ;
# tcc_cc.c 283
0 return
:s3
# tcc_cc.c 284
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 285
it ->s9_m_base s6_m_ch + it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 286
it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 287
it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
}
# tcc_cc.c 290
it ->s9_m__state 4 = ;
# tcc_cc.c 290
0 return
:s4
# tcc_cc.c 291
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 292
it ->s9_m_base s6_m_ch + it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 293
it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 294
it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
}
# tcc_cc.c 296
it ->s9_m_base s6_m_ch + ?1 char 34 == if
{
# tcc_cc.c 297
# tcc_cc.c 298
it ->s9_m__state 5 = ;
# tcc_cc.c 298
0 return
:s5
# tcc_cc.c 299
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 300
it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 301
it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 302
it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
}
# tcc_cc.c 304
it ->s9_m__state 0 = ;
# tcc_cc.c 305
goto s0
}
# tcc_cc.c 307
it ->s9_m_base s6_m_ch + ?1 char 39 == if
{
# tcc_cc.c 308
# tcc_cc.c 309
it ->s9_m__state 6 = ;
# tcc_cc.c 309
0 return
:s6
# tcc_cc.c 310
it ->s9_m_base s6_m_ch + it ->s9_m__a ?1 char =1 ;
# tcc_cc.c 311
it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 312
it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 313
it ->s9_m_base s6_m_ch + ?1 char 92 == if
{
# tcc_cc.c 314
# tcc_cc.c 315
it ->s9_m__state 7 = ;
# tcc_cc.c 315
0 return
:s7
# tcc_cc.c 316
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 317
it ->s9_m_base s6_m_ch + it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 318
it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 319
it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
}
# tcc_cc.c 321
it ->s9_m__state 8 = ;
# tcc_cc.c 321
0 return
:s8
# tcc_cc.c 322
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 323
it ->s9_m_base s6_m_ch + it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 324
it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 325
it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 326
it ->s9_m__state 0 = ;
# tcc_cc.c 327
it ->s9_m_base s6_m_ch + ?1 char 39 == if
{
# tcc_cc.c 328
# tcc_cc.c 329
it ->s9_m__state 9 = ;
# tcc_cc.c 329
0 return
:s9
# tcc_cc.c 330
it ->s9_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 331
it ->s9_m__a it ->s9_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 332
it ->s9_m_base s6_m_line + it ->s9_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 333
it ->s9_m_base s6_m_column + it ->s9_m__source_it ->s6_m_column ? = ;
}
# tcc_cc.c 335
it ->s9_m__state 0 = ;
# tcc_cc.c 336
goto s0
}
0 return
}
void new_comment_strip_iterator
{
int source_it source_it =:
int it it 32 malloc () = ;
# tcc_cc.c 343
it ->s9_m__source_it source_it ? = ;
# tcc_cc.c 344
it ->s9_m_base s6_m_filename + source_it ->s6_m_filename ? = ;
# tcc_cc.c 345
it ->s9_m_base s6_m_next + comment_strip_iterator_next = ;
# tcc_cc.c 346
it ->s9_m__a source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 347
it ->s9_m__state 0 = ;
# tcc_cc.c 348
it ->s9_m_base comment_strip_iterator_next () ;
# tcc_cc.c 349
it ? return
0 return
}
const s10_m_base 0
const s10_m__source_it 20
const s10_m__parent_source_its 24
const s10_m__nr_parents 64
void include_iterator_next
{
int char_it char_it =:
int it it char_it ? = ;
int _source_it_next
# tcc_cc.c 371
_source_it_next it ->s10_m__source_it ->s6_m_next ? = ;
# tcc_cc.c 372
it ->s10_m__source_it ? _source_it_next ? () ;
# tcc_cc.c 373
it ->s10_m_base s6_m_ch + it ->s10_m__source_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 374
it ->s10_m_base s6_m_ch + ?1 char 0 == if
{
# tcc_cc.c 375
# tcc_cc.c 376
it ->s10_m__nr_parents ? 0 == if
{
# tcc_cc.c 377
# tcc_cc.c 378
it ->s10_m_base s6_m_ch + 0 =1 ;
# tcc_cc.c 379
0 return
}
# tcc_cc.c 381
it ->s10_m_base s6_m_ch + 10 =1 ;
# tcc_cc.c 382
it ->s10_m__nr_parents it ->s10_m__nr_parents ? 1 - = ;
# tcc_cc.c 383
it ->s10_m__source_it it ->s10_m__parent_source_its it ->s10_m__nr_parents ? 4 * + ? = ;
# tcc_cc.c 384
it ->s10_m_base s6_m_filename + it ->s10_m__source_it ->s6_m_filename ? = ;
}
# tcc_cc.c 386
it ->s10_m_base s6_m_filename + it ->s10_m__source_it ->s6_m_filename ? = ;
# tcc_cc.c 387
it ->s10_m_base s6_m_line + it ->s10_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 388
it ->s10_m_base s6_m_column + it ->s10_m__source_it ->s6_m_column ? = ;
0 return
}
void include_iterator_add
{
int include_it include_it =:
int it it =:
# tcc_cc.c 393
it ->s10_m__parent_source_its it ->s10_m__nr_parents ? 4 * + it ->s10_m__source_it ? = ;
# tcc_cc.c 394
it ->s10_m__nr_parents it ->s10_m__nr_parents ? 1 + = ;
# tcc_cc.c 395
it ->s10_m__source_it include_it ? = ;
# tcc_cc.c 396
it ->s10_m_base s6_m_filename + it ->s10_m__source_it ->s6_m_filename ? = ;
# tcc_cc.c 397
it ->s10_m_base s6_m_line + it ->s10_m__source_it ->s6_m_line ? = ;
# tcc_cc.c 398
it ->s10_m_base s6_m_column + it ->s10_m__source_it ->s6_m_column ? = ;
# tcc_cc.c 399
it ->s10_m_base s6_m_ch + it ->s10_m__source_it ->s6_m_ch ?1 char =1 ;
0 return
}
void new_include_iterator
{
int include_it include_it =:
int it it 68 malloc () = ;
# tcc_cc.c 405
it ->s10_m_base s6_m_filename + include_it ->s6_m_filename ? = ;
# tcc_cc.c 406
it ->s10_m_base s6_m_line + include_it ->s6_m_line ? = ;
# tcc_cc.c 407
it ->s10_m_base s6_m_column + include_it ->s6_m_column ? = ;
# tcc_cc.c 408
it ->s10_m_base s6_m_ch + include_it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 409
it ->s10_m_base s6_m_next + include_iterator_next = ;
# tcc_cc.c 410
it ->s10_m__source_it include_it ? = ;
# tcc_cc.c 411
it ->s10_m__nr_parents 0 = ;
# tcc_cc.c 412
it ? return
0 return
}
void token_next_p ;
const s11_m_kind 0
const s11_m_token 4
const s11_m_length 8
const s11_m_filename 12
const s11_m_line 16
const s11_m_column 20
const s11_m_next 24
const s12_m_base 0
const s12_m__char_iterator 28
void tokenizer_skip_white_space
{
int skip_nl skip_nl =:
int tokenizer tokenizer =:
int it
# tcc_cc.c 524
it tokenizer ->s12_m__char_iterator ? = ;
int it_next it_next it ->s6_m_next ? = ;
int ch ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 528
do
{
ch ?1 char 0 != && { ch ?1 char 32 <=s } && { skip_nl ?1 char || { ch ?1 char 10 != } } ! if { break }
# tcc_cc.c 529
# tcc_cc.c 530
it ? it_next ? () ;
# tcc_cc.c 530
ch it ->s6_m_ch ?1 char =1 ;
}
0 return
}
void tokenizer_parse_char_literal
{
int tokenizer tokenizer =:
int it it tokenizer ->s12_m__char_iterator ? = ;
int it_next
# tcc_cc.c 537
it_next it ->s6_m_next ? = ;
int ch ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 539
it ? it_next ? () ;
# tcc_cc.c 540
ch ?1 char 92 != if
{
# tcc_cc.c 541
# tcc_cc.c 542
ch ?1 char return
}
# tcc_cc.c 544
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 545
it ? it_next ? () ;
# tcc_cc.c 546
ch ?1 char 48 == || { ch ?1 char 49 == } if
{
# tcc_cc.c 547
int val val ch ?1 char 48 - = ;
# tcc_cc.c 549
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 550
48 ch ?1 char <=s && { ch ?1 char 55 <=s } if
{
# tcc_cc.c 551
# tcc_cc.c 552
val 8 val ? * ch ?1 char + 48 - = ;
# tcc_cc.c 553
it ? it_next ? () ;
# tcc_cc.c 554
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 555
48 ch ?1 char <=s && { ch ?1 char 55 <=s } if
{
# tcc_cc.c 556
# tcc_cc.c 557
val 8 val ? * ch ?1 char + 48 - = ;
# tcc_cc.c 558
it ? it_next ? () ;
}
# tcc_cc.c 560
val ? return
}
else
{
# tcc_cc.c 562
val ? 0 == if
{
# tcc_cc.c 563
# tcc_cc.c 564
0 return
}
else
{
# tcc_cc.c 567
# tcc_cc.c 568
49 return
}
}
}
# tcc_cc.c 571
ch ?1 char 97 == if
{
# tcc_cc.c 572
# tcc_cc.c 573
ch 7 =1 ;
}
else
{
# tcc_cc.c 575
ch ?1 char 98 == if
{
# tcc_cc.c 576
# tcc_cc.c 577
ch 8 =1 ;
}
else
{
# tcc_cc.c 579
ch ?1 char 102 == if
{
# tcc_cc.c 580
# tcc_cc.c 581
ch 12 =1 ;
}
else
{
# tcc_cc.c 583
ch ?1 char 110 == if
{
# tcc_cc.c 584
# tcc_cc.c 585
ch 10 =1 ;
}
else
{
# tcc_cc.c 587
ch ?1 char 114 == if
{
# tcc_cc.c 588
# tcc_cc.c 589
ch 13 =1 ;
}
else
{
# tcc_cc.c 591
ch ?1 char 116 == if
{
# tcc_cc.c 592
# tcc_cc.c 593
ch 9 =1 ;
}
else
{
# tcc_cc.c 595
ch ?1 char 118 == if
{
# tcc_cc.c 596
# tcc_cc.c 597
ch 11 =1 ;
}
else
{
# tcc_cc.c 599
ch ?1 char 120 == if
{
# tcc_cc.c 600
int v v 0 = ;
# tcc_cc.c 602
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 603
48 ch ?1 char <=s && { ch ?1 char 57 <=s } if
{
# tcc_cc.c 604
v 16 ch ?1 char 48 - * = ;
}
else
{
# tcc_cc.c 605
65 ch ?1 char <=s && { ch ?1 char 70 <=s } if
{
# tcc_cc.c 606
v 16 ch ?1 char 65 - 10 + * = ;
}
else
{
# tcc_cc.c 607
97 ch ?1 char <=s && { ch ?1 char 102 <=s } if
{
# tcc_cc.c 608
v 16 ch ?1 char 97 - 10 + * = ;
}
else
{
# tcc_cc.c 610
"%s:%d.%d Warning: Invalid character '%c' after \\x\n" { int 4 __var_args __var_args it ->s6_m_filename ? = ; __var_args 4 + it ->s6_m_line ? = ; __var_args 8 + it ->s6_m_column ? = ; __var_args 12 + ch ?1 char = ; __var_args printf () } ;
}
}
}
# tcc_cc.c 611
it ? it_next ? () ;
# tcc_cc.c 612
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 613
48 ch ?1 char <=s && { ch ?1 char 57 <=s } if
{
# tcc_cc.c 614
v $ ? ch ?1 char 48 - + = ;
}
else
{
# tcc_cc.c 615
65 ch ?1 char <=s && { ch ?1 char 70 <=s } if
{
# tcc_cc.c 616
v $ ? ch ?1 char 65 - 10 + + = ;
}
else
{
# tcc_cc.c 617
97 ch ?1 char <=s && { ch ?1 char 102 <=s } if
{
# tcc_cc.c 618
v $ ? ch ?1 char 97 - 10 + + = ;
}
else
{
# tcc_cc.c 620
"%s:%d.%d Warning: Invalid character '%c' after \\x\n" { int 4 __var_args __var_args it ->s6_m_filename ? = ; __var_args 4 + it ->s6_m_line ? = ; __var_args 8 + it ->s6_m_column ? = ; __var_args 12 + ch ?1 char = ; __var_args printf () } ;
}
}
}
# tcc_cc.c 621
ch v ? =1 ;
# tcc_cc.c 622
it ? it_next ? () ;
}
else
{
# tcc_cc.c 624
ch ?1 char 39 == || { ch ?1 char 34 == } || { ch ?1 char 92 == } if
{
# tcc_cc.c 625
}
else
{
# tcc_cc.c 627
"%s:%d.%d Warning: Unknown escape sequence \\%c\n" { int 4 __var_args __var_args it ->s6_m_filename ? = ; __var_args 4 + it ->s6_m_line ? = ; __var_args 8 + it ->s6_m_column ? = ; __var_args 12 + ch ?1 char = ; __var_args printf () } ;
}
}
}
}
}
}
}
}
}
# tcc_cc.c 628
ch ?1 char return
0 return
}
void tokenizer_next
{
int skip_nl skip_nl =:
int token_it token_it =:
int tokenizer tokenizer token_it ? = ;
# tcc_cc.c 636
tokenizer ? skip_nl ?1 char tokenizer_skip_white_space () ;
int it it tokenizer ->s12_m__char_iterator ? = ;
int it_next
# tcc_cc.c 638
it_next it ->s6_m_next ? = ;
int i i 0 = ;
int ch ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 641
tokenizer ->s12_m_base s11_m_kind + 0 = ;
# tcc_cc.c 642
ch ?1 char 0 == if
{
# tcc_cc.c 643
# tcc_cc.c 644
goto done
}
int at_start_of_line at_start_of_line token_it ->s11_m_filename ? tokenizer ->s12_m__char_iterator ->s6_m_filename ? != || { token_it ->s11_m_line ? tokenizer ->s12_m__char_iterator ->s6_m_line ? != } =1 ;
# tcc_cc.c 648
token_it ->s11_m_filename it ->s6_m_filename ? = ;
# tcc_cc.c 649
token_it ->s11_m_line it ->s6_m_line ? = ;
# tcc_cc.c 650
token_it ->s11_m_column it ->s6_m_column ? = ;
# tcc_cc.c 651
ch ?1 char 10 == if
{
# tcc_cc.c 652
# tcc_cc.c 653
token_it ->s11_m_kind 10 = ;
}
else
{
# tcc_cc.c 655
ch ?1 char 35 == && { at_start_of_line ?1 char } if
{
# tcc_cc.c 656
# tcc_cc.c 657
token_it ->s11_m_token ? i ? + 35 =1 ;
# tcc_cc.c 657
i i ? 1 + = ;
# tcc_cc.c 657
it ? it_next ? () ;
# tcc_cc.c 658
tokenizer ? 1 tokenizer_skip_white_space () ;
# tcc_cc.c 659
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 660
do
{
97 ch ?1 char <=s && { ch ?1 char 122 <=s } ! if { break }
# tcc_cc.c 661
# tcc_cc.c 662
token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 662
i i ? 1 + = ;
# tcc_cc.c 662
it ? it_next ? () ;
# tcc_cc.c 662
ch it ->s6_m_ch ?1 char =1 ;
}
# tcc_cc.c 664
token_it ->s11_m_token ? i ? + 0 =1 ;
# tcc_cc.c 665
"#else" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 665
token_it ->s11_m_kind 1029 = ;
}
else
{
# tcc_cc.c 666
"#elif" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 666
token_it ->s11_m_kind 1030 = ;
}
else
{
# tcc_cc.c 667
"#endif" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 667
token_it ->s11_m_kind 1031 = ;
}
else
{
# tcc_cc.c 668
"#define" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 668
token_it ->s11_m_kind 1032 = ;
}
else
{
# tcc_cc.c 669
"#if" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 669
token_it ->s11_m_kind 1034 = ;
}
else
{
# tcc_cc.c 670
"#ifdef" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 670
token_it ->s11_m_kind 1035 = ;
}
else
{
# tcc_cc.c 671
"#ifndef" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 671
token_it ->s11_m_kind 1036 = ;
}
else
{
# tcc_cc.c 672
"#include" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 672
token_it ->s11_m_kind 1037 = ;
}
else
{
# tcc_cc.c 673
"#undef" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 673
token_it ->s11_m_kind 1038 = ;
}
else
{
# tcc_cc.c 674
"#error" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 674
token_it ->s11_m_kind 1039 = ;
}
}
}
}
}
}
}
}
}
}
}
else
{
# tcc_cc.c 676
97 ch ?1 char <=s && { ch ?1 char 122 <=s } || { 65 ch ?1 char <=s && { ch ?1 char 90 <=s } } || { ch ?1 char 95 == } if
{
# tcc_cc.c 677
# tcc_cc.c 678
token_it ->s11_m_kind 105 = ;
# tcc_cc.c 679
token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 679
i i ? 1 + = ;
# tcc_cc.c 679
it ? it_next ? () ;
# tcc_cc.c 679
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 680
do
{
97 ch ?1 char <=s && { ch ?1 char 122 <=s } || { 65 ch ?1 char <=s && { ch ?1 char 90 <=s } } || { 48 ch ?1 char <=s && { ch ?1 char 57 <=s } } || { ch ?1 char 95 == } ! if { break }
# tcc_cc.c 681
# tcc_cc.c 682
token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 682
i i ? 1 + = ;
# tcc_cc.c 682
it ? it_next ? () ;
# tcc_cc.c 682
ch it ->s6_m_ch ?1 char =1 ;
}
# tcc_cc.c 684
token_it ->s11_m_token ? i ? + 0 =1 ;
# tcc_cc.c 685
"break" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 685
token_it ->s11_m_kind 1000 = ;
}
else
{
# tcc_cc.c 686
"case" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 686
token_it ->s11_m_kind 1001 = ;
}
else
{
# tcc_cc.c 687
"char" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 687
token_it ->s11_m_kind 1002 = ;
}
else
{
# tcc_cc.c 688
"continue" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 688
token_it ->s11_m_kind 1004 = ;
}
else
{
# tcc_cc.c 689
"const" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 689
token_it ->s11_m_kind 1003 = ;
}
else
{
# tcc_cc.c 690
"default" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 690
token_it ->s11_m_kind 1005 = ;
}
else
{
# tcc_cc.c 691
"defined" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 691
token_it ->s11_m_kind 1033 = ;
}
else
{
# tcc_cc.c 692
"do" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 692
token_it ->s11_m_kind 1006 = ;
}
else
{
# tcc_cc.c 693
"double" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 693
token_it ->s11_m_kind 1007 = ;
}
else
{
# tcc_cc.c 694
"else" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 694
token_it ->s11_m_kind 1008 = ;
}
else
{
# tcc_cc.c 695
"enum" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 695
token_it ->s11_m_kind 1009 = ;
}
else
{
# tcc_cc.c 696
"extern" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 696
token_it ->s11_m_kind 1010 = ;
}
else
{
# tcc_cc.c 697
"float" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 697
token_it ->s11_m_kind 1011 = ;
}
else
{
# tcc_cc.c 698
"for" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 698
token_it ->s11_m_kind 1012 = ;
}
else
{
# tcc_cc.c 699
"goto" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 699
token_it ->s11_m_kind 1013 = ;
}
else
{
# tcc_cc.c 700
"if" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 700
token_it ->s11_m_kind 1014 = ;
}
else
{
# tcc_cc.c 701
"inline" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 701
token_it ->s11_m_kind 1015 = ;
}
else
{
# tcc_cc.c 702
"int" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 702
token_it ->s11_m_kind 1016 = ;
}
else
{
# tcc_cc.c 703
"long" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 703
token_it ->s11_m_kind 1017 = ;
}
else
{
# tcc_cc.c 704
"return" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 704
token_it ->s11_m_kind 1018 = ;
}
else
{
# tcc_cc.c 705
"short" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 705
token_it ->s11_m_kind 1019 = ;
}
else
{
# tcc_cc.c 706
"sizeof" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 706
token_it ->s11_m_kind 1020 = ;
}
else
{
# tcc_cc.c 707
"static" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 707
token_it ->s11_m_kind 1021 = ;
}
else
{
# tcc_cc.c 708
"struct" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 708
token_it ->s11_m_kind 1022 = ;
}
else
{
# tcc_cc.c 709
"switch" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 709
token_it ->s11_m_kind 1023 = ;
}
else
{
# tcc_cc.c 710
"typedef" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 710
token_it ->s11_m_kind 1024 = ;
}
else
{
# tcc_cc.c 711
"union" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 711
token_it ->s11_m_kind 1025 = ;
}
else
{
# tcc_cc.c 712
"unsigned" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 712
token_it ->s11_m_kind 1026 = ;
}
else
{
# tcc_cc.c 713
"void" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 713
token_it ->s11_m_kind 1027 = ;
}
else
{
# tcc_cc.c 714
"while" token_it ->s11_m_token ? eqstr () if
{
# tcc_cc.c 714
token_it ->s11_m_kind 1028 = ;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
else
{
# tcc_cc.c 716
48 ch ?1 char <=s && { ch ?1 char 57 <=s } if
{
# tcc_cc.c 717
# tcc_cc.c 718
token_it ->s11_m_kind 48 = ;
# tcc_cc.c 719
ch ?1 char 48 == if
{
# tcc_cc.c 720
# tcc_cc.c 721
token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 721
i i ? 1 + = ;
# tcc_cc.c 721
it ? it_next ? () ;
# tcc_cc.c 721
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 722
ch ?1 char 120 == if
{
# tcc_cc.c 723
# tcc_cc.c 724
token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 724
i i ? 1 + = ;
# tcc_cc.c 724
it ? it_next ? () ;
# tcc_cc.c 724
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 725
do
{
48 ch ?1 char <=s && { ch ?1 char 57 <=s } || { 97 ch ?1 char <=s && { ch ?1 char 102 <=s } } || { 65 ch ?1 char <=s && { ch ?1 char 70 <=s } } ! if { break }
# tcc_cc.c 726
# tcc_cc.c 727
token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 727
i i ? 1 + = ;
# tcc_cc.c 727
it ? it_next ? () ;
# tcc_cc.c 727
ch it ->s6_m_ch ?1 char =1 ;
}
}
else
{
# tcc_cc.c 731
# tcc_cc.c 732
do
{
48 ch ?1 char <=s && { ch ?1 char 55 <=s } ! if { break }
# tcc_cc.c 733
# tcc_cc.c 734
token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 734
i i ? 1 + = ;
# tcc_cc.c 734
it ? it_next ? () ;
# tcc_cc.c 734
ch it ->s6_m_ch ?1 char =1 ;
}
}
}
else
{
# tcc_cc.c 739
# tcc_cc.c 740
do
{
48 ch ?1 char <=s && { ch ?1 char 57 <=s } ! if { break }
# tcc_cc.c 741
# tcc_cc.c 742
token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 742
i i ? 1 + = ;
# tcc_cc.c 742
it ? it_next ? () ;
# tcc_cc.c 742
ch it ->s6_m_ch ?1 char =1 ;
}
}
# tcc_cc.c 745
ch ?1 char 85 == if
{
# tcc_cc.c 746
# tcc_cc.c 747
token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 747
i i ? 1 + = ;
# tcc_cc.c 747
it ? it_next ? () ;
# tcc_cc.c 747
ch it ->s6_m_ch ?1 char =1 ;
}
# tcc_cc.c 749
do
{
ch ?1 char 76 == ! if { break }
# tcc_cc.c 750
# tcc_cc.c 751
token_it ->s11_m_token ? i ? + ch ?1 char =1 ;
# tcc_cc.c 751
i i ? 1 + = ;
# tcc_cc.c 751
it ? it_next ? () ;
# tcc_cc.c 751
ch it ->s6_m_ch ?1 char =1 ;
}
}
else
{
# tcc_cc.c 754
ch ?1 char 39 == if
{
# tcc_cc.c 755
# tcc_cc.c 756
token_it ->s11_m_kind ch ?1 char = ;
# tcc_cc.c 757
it ? it_next ? () ;
# tcc_cc.c 758
token_it ->s11_m_token ? 0 + tokenizer ? tokenizer_parse_char_literal () =1 ;
# tcc_cc.c 759
i 1 = ;
# tcc_cc.c 760
it ->s6_m_ch ?1 char 39 == if
{
# tcc_cc.c 761
# tcc_cc.c 762
it ? it_next ? () ;
}
}
else
{
# tcc_cc.c 765
ch ?1 char 34 == if
{
# tcc_cc.c 766
# tcc_cc.c 767
token_it ->s11_m_kind ch ?1 char = ;
# tcc_cc.c 767
it ? it_next ? () ;
# tcc_cc.c 767
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 768
do
{
ch ?1 char 0 != && { ch ?1 char 10 != } && { ch ?1 char 34 != } ! if { break }
# tcc_cc.c 769
# tcc_cc.c 770
i ? 6000 == if
{
# tcc_cc.c 771
# tcc_cc.c 772
stderr ? "MAX_TOKEN_LEN %d exceeded\n" { int 1 __var_args __var_args i ? = ; __var_args fprintf () } ;
# tcc_cc.c 773
4294967295 exit () ;
}
# tcc_cc.c 775
token_it ->s11_m_token ? i ? + tokenizer ? tokenizer_parse_char_literal () =1 ;
# tcc_cc.c 776
i $ ? 1 + = 1 - ;
# tcc_cc.c 777
ch it ->s6_m_ch ?1 char =1 ;
}
# tcc_cc.c 779
ch ?1 char 34 == if
{
# tcc_cc.c 780
# tcc_cc.c 781
it ? it_next ? () ;
}
}
else
{
# tcc_cc.c 785
# tcc_cc.c 786
token_it ->s11_m_kind ch ?1 char = ;
# tcc_cc.c 787
token_it ->s11_m_token ? 0 + ch ?1 char =1 ;
# tcc_cc.c 788
i 1 = ;
# tcc_cc.c 789
ch ?1 char 35 == if
{
# tcc_cc.c 790
# tcc_cc.c 791
it ? it_next ? () ;
# tcc_cc.c 792
it ->s6_m_ch ?1 char 35 == if
{
# tcc_cc.c 793
# tcc_cc.c 794
it ? it_next ? () ;
# tcc_cc.c 795
token_it ->s11_m_kind 500 = ;
# tcc_cc.c 796
token_it ->s11_m_token ? 1 + 35 =1 ;
# tcc_cc.c 797
i 2 = ;
}
}
else
{
# tcc_cc.c 800
ch ?1 char 61 == if
{
# tcc_cc.c 801
# tcc_cc.c 802
it ? it_next ? () ;
# tcc_cc.c 803
it ->s6_m_ch ?1 char 61 == if
{
# tcc_cc.c 804
# tcc_cc.c 805
it ? it_next ? () ;
# tcc_cc.c 806
token_it ->s11_m_kind 501 = ;
# tcc_cc.c 807
token_it ->s11_m_token ? 1 + 61 =1 ;
# tcc_cc.c 808
i 2 = ;
}
}
else
{
# tcc_cc.c 811
ch ?1 char 42 == || { ch ?1 char 47 == } || { ch ?1 char 37 == } || { ch ?1 char 94 == } if
{
# tcc_cc.c 812
# tcc_cc.c 813
it ? it_next ? () ;
# tcc_cc.c 814
it ->s6_m_ch ?1 char 61 == if
{
# tcc_cc.c 815
# tcc_cc.c 816
it ? it_next ? () ;
# tcc_cc.c 817
token_it ->s11_m_kind 600 ch ?1 char + = ;
# tcc_cc.c 818
token_it ->s11_m_token ? 1 + 61 =1 ;
# tcc_cc.c 819
i 2 = ;
}
}
else
{
# tcc_cc.c 822
ch ?1 char 45 == if
{
# tcc_cc.c 823
# tcc_cc.c 824
it ? it_next ? () ;
# tcc_cc.c 824
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 825
ch ?1 char 45 == if
{
# tcc_cc.c 826
# tcc_cc.c 827
it ? it_next ? () ;
# tcc_cc.c 828
token_it ->s11_m_kind 506 = ;
# tcc_cc.c 829
token_it ->s11_m_token ? 1 + ch ?1 char =1 ;
# tcc_cc.c 830
i 2 = ;
}
else
{
# tcc_cc.c 832
ch ?1 char 61 == if
{
# tcc_cc.c 833
# tcc_cc.c 834
it ? it_next ? () ;
# tcc_cc.c 835
token_it ->s11_m_kind 600 45 + = ;
# tcc_cc.c 836
token_it ->s11_m_token ? 1 + ch ?1 char =1 ;
# tcc_cc.c 837
i 2 = ;
}
else
{
# tcc_cc.c 839
ch ?1 char 62 == if
{
# tcc_cc.c 840
# tcc_cc.c 841
it ? it_next ? () ;
# tcc_cc.c 842
token_it ->s11_m_kind 507 = ;
# tcc_cc.c 843
token_it ->s11_m_token ? 1 + ch ?1 char =1 ;
# tcc_cc.c 844
i 2 = ;
}
}
}
}
else
{
# tcc_cc.c 847
ch ?1 char 43 == || { ch ?1 char 45 == } if
{
# tcc_cc.c 848
# tcc_cc.c 849
it ? it_next ? () ;
# tcc_cc.c 850
ch it ->s6_m_ch ?1 char =1 ;
# tcc_cc.c 851
ch ?1 char token_it ->s11_m_token ? 0 + ?1 char == || { ch ?1 char 61 == } if
{
# tcc_cc.c 852
# tcc_cc.c 853
it ? it_next ? () ;
# tcc_cc.c 854
token_it ->s11_m_token ? 1 + ch ?1 char =1 ;
# tcc_cc.c 855
ch ?1 char 43 == if
{
# tcc_cc.c 856
# tcc_cc.c 857
token_it ->s11_m_kind 505 = ;
}
else
{
# tcc_cc.c 859
ch ?1 char 45 == if
{
# tcc_cc.c 860
# tcc_cc.c 861
token_it ->s11_m_kind 506 = ;
}
else
{
# tcc_cc.c 864
# tcc_cc.c 865
token_it ->s11_m_kind 600 token_it ->s11_m_token ? 0 + ?1 char + = ;
}
}
# tcc_cc.c 867
i 2 = ;
}
}
else
{
# tcc_cc.c 870
ch ?1 char 60 == || { ch ?1 char 62 == } || { ch ?1 char 124 == } || { ch ?1 char 38 == } if
{
# tcc_cc.c 871
# tcc_cc.c 872
it ? it_next ? () ;
# tcc_cc.c 873
it ->s6_m_ch ?1 char ch ?1 char == if
{
# tcc_cc.c 874
# tcc_cc.c 875
it ? it_next ? () ;
# tcc_cc.c 876
token_it ->s11_m_kind 800 ch ?1 char + = ;
# tcc_cc.c 877
token_it ->s11_m_token ? 1 + ch ?1 char =1 ;
# tcc_cc.c 878
i 2 = ;
}
# tcc_cc.c 880
it ->s6_m_ch ?1 char 61 == && { ch ?1 char 60 == || { ch ?1 char 62 == } || { ch ?1 char 38 == } || { ch ?1 char 124 == } } if
{
# tcc_cc.c 881
# tcc_cc.c 882
it ? it_next ? () ;
# tcc_cc.c 883
i ? 2 == if
{
# tcc_cc.c 884
# tcc_cc.c 885
token_it ->s11_m_kind 600 ch ?1 char + = ;
}
else
{
# tcc_cc.c 887
ch ?1 char 38 == if
{
# tcc_cc.c 888
# tcc_cc.c 889
token_it ->s11_m_kind 600 38 + = ;
}
else
{
# tcc_cc.c 891
ch ?1 char 124 == if
{
# tcc_cc.c 892
# tcc_cc.c 893
token_it ->s11_m_kind 600 124 + = ;
}
else
{
# tcc_cc.c 895
ch ?1 char 60 == if
{
# tcc_cc.c 896
# tcc_cc.c 897
token_it ->s11_m_kind 503 = ;
}
else
{
# tcc_cc.c 900
# tcc_cc.c 901
token_it ->s11_m_kind 504 = ;
}
}
}
}
# tcc_cc.c 903
token_it ->s11_m_token ? i ? + 61 =1 ;
# tcc_cc.c 904
i i ? 1 + = ;
}
}
else
{
# tcc_cc.c 907
ch ?1 char 33 == if
{
# tcc_cc.c 908
# tcc_cc.c 909
it ? it_next ? () ;
# tcc_cc.c 910
it ->s6_m_ch ?1 char 61 == if
{
# tcc_cc.c 911
# tcc_cc.c 912
it ? it_next ? () ;
# tcc_cc.c 913
token_it ->s11_m_kind 502 = ;
# tcc_cc.c 914
token_it ->s11_m_token ? 1 + 61 =1 ;
# tcc_cc.c 915
i 2 = ;
}
}
else
{
# tcc_cc.c 918
ch ?1 char 46 == if
{
# tcc_cc.c 919
# tcc_cc.c 920
it ? it_next ? () ;
# tcc_cc.c 921
it ->s6_m_ch ?1 char 46 == if
{
# tcc_cc.c 922
# tcc_cc.c 923
it ? it_next ? () ;
# tcc_cc.c 924
token_it ->s11_m_kind 508 = ;
# tcc_cc.c 925
token_it ->s11_m_token ? 1 + 46 =1 ;
# tcc_cc.c 926
i 2 = ;
# tcc_cc.c 927
it ->s6_m_ch ?1 char 46 == if
{
# tcc_cc.c 928
# tcc_cc.c 929
it ? it_next ? () ;
# tcc_cc.c 930
token_it ->s11_m_kind 509 = ;
# tcc_cc.c 931
token_it ->s11_m_token ? 2 + 46 =1 ;
# tcc_cc.c 932
i 3 = ;
}
}
}
else
{
# tcc_cc.c 937
# tcc_cc.c 938
it ? it_next ? () ;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
:done
# tcc_cc.c 942
token_it ->s11_m_token ? i ? + 0 =1 ;
# tcc_cc.c 943
token_it ->s11_m_length i ? = ;
# tcc_cc.c 944
opt_trace_parser ?1 char if
{
# tcc_cc.c 945
"tokenizer_next %d: %d '%s'\n" { int 3 __var_args __var_args token_it ->s11_m_line ? = ; __var_args 4 + token_it ->s11_m_kind ? = ; __var_args 8 + token_it ->s11_m_token ? = ; __var_args printf () } ;
}
# tcc_cc.c 946
token_it ? return
0 return
}
void string_int_value
{
int s s =:
int int_value int_value 0 = ;
# tcc_cc.c 952
s ? ?1 char 48 == if
{
# tcc_cc.c 953
# tcc_cc.c 954
s $ ? 1 + = 1 - ;
# tcc_cc.c 955
s ? ?1 char 120 == if
{
# tcc_cc.c 956
# tcc_cc.c 957
s $ ? 1 + = 1 - ;
# tcc_cc.c 958
do
{
1 ! if { break }
# tcc_cc.c 959
# tcc_cc.c 960
48 s ? ?1 char <=s && { s ? ?1 char 57 <=s } if
{
# tcc_cc.c 961
int_value 16 int_value ? * s ? ?1 char + 48 - = ;
}
else
{
# tcc_cc.c 962
97 s ? ?1 char <=s && { s ? ?1 char 102 <=s } if
{
# tcc_cc.c 963
int_value 16 int_value ? * s ? ?1 char + 97 - 10 + = ;
}
else
{
# tcc_cc.c 964
65 s ? ?1 char <=s && { s ? ?1 char 70 <=s } if
{
# tcc_cc.c 965
int_value 16 int_value ? * s ? ?1 char + 65 - 10 + = ;
}
else
{
# tcc_cc.c 967
break
}
}
}
# tcc_cc.c 968
s $ ? 1 + = 1 - ;
}
}
else
{
# tcc_cc.c 972
# tcc_cc.c 973
do
{
48 s ? ?1 char <=s && { s ? ?1 char 55 <=s } ! if { break }
# tcc_cc.c 974
# tcc_cc.c 975
int_value 8 int_value ? * s ? ?1 char + 48 - = ;
# tcc_cc.c 976
s $ ? 1 + = 1 - ;
}
}
}
else
{
# tcc_cc.c 981
# tcc_cc.c 982
do
{
48 s ? ?1 char <=s && { s ? ?1 char 57 <=s } ! if { break }
# tcc_cc.c 983
# tcc_cc.c 984
int_value 10 int_value ? * s ? ?1 char + 48 - = ;
# tcc_cc.c 985
s $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 988
s ? ?1 char 85 == if
{
# tcc_cc.c 989
# tcc_cc.c 990
s $ ? 1 + = 1 - ;
}
# tcc_cc.c 992
do
{
s ? ?1 char 76 == ! if { break }
# tcc_cc.c 993
# tcc_cc.c 994
s $ ? 1 + = 1 - ;
}
# tcc_cc.c 996
int_value ? return
0 return
}
void token_it_int_value
{
int it it =:
# tcc_cc.c 1001
it ->s11_m_token ? string_int_value () return
0 return
}
void new_tokenizer
{
int char_iterator char_iterator =:
int tokenizer tokenizer 32 malloc () = ;
# tcc_cc.c 1007
tokenizer ->s12_m__char_iterator char_iterator ? = ;
# tcc_cc.c 1008
tokenizer ->s12_m_base s11_m_token + 6000 malloc () = ;
# tcc_cc.c 1009
tokenizer ->s12_m_base s11_m_filename + 0 = ;
# tcc_cc.c 1010
tokenizer ->s12_m_base s11_m_next + tokenizer_next = ;
# tcc_cc.c 1011
tokenizer ? return
0 return
}
const s13_m_kind 0
const s13_m_token 4
const s13_m_length 8
const s13_m_filename 12
const s13_m_line 16
const s13_m_column 20
const s13_m_next 24
void new_token
{
int kind kind =:
int token token 28 malloc () = ;
# tcc_cc.c 1031
token ->s13_m_kind kind ? = ;
# tcc_cc.c 1032
token ->s13_m_token 0 = ;
# tcc_cc.c 1033
token ->s13_m_length 0 = ;
# tcc_cc.c 1034
token ->s13_m_filename "<env>" = ;
# tcc_cc.c 1035
token ->s13_m_line 0 = ;
# tcc_cc.c 1036
token ->s13_m_column 0 = ;
# tcc_cc.c 1037
token ->s13_m_next 0 = ;
# tcc_cc.c 1038
token ? return
0 return
}
void new_int_token
{
int str str =:
int token token 48 new_token () = ;
# tcc_cc.c 1043
token ->s13_m_token str ? copystr () = ;
# tcc_cc.c 1044
token ? return
0 return
}
void new_str_token
{
int str str =:
int token token 34 new_token () = ;
# tcc_cc.c 1049
token ->s13_m_token str ? copystr () = ;
# tcc_cc.c 1050
token ->s13_m_length str ? strlen () = ;
# tcc_cc.c 1051
token ? return
0 return
}
void new_token_from_it
{
int it it =:
int token token it ->s11_m_kind ? new_token () = ;
# tcc_cc.c 1056
token ->s13_m_token it ->s11_m_token ? it ->s11_m_length ? copystrlen () = ;
# tcc_cc.c 1057
token ->s13_m_length it ->s11_m_length ? = ;
# tcc_cc.c 1058
token ->s13_m_filename it ->s11_m_filename ? = ;
# tcc_cc.c 1059
token ->s13_m_line it ->s11_m_line ? = ;
# tcc_cc.c 1060
token ->s13_m_column it ->s11_m_column ? = ;
# tcc_cc.c 1061
token ? return
0 return
}
const s14_m_name 0
const s14_m_nr_args 4
const s14_m_args 8
const s14_m_tokens 48
const s14_m_next 52
int environment
void get_env
{
int create create =:
int name name =:
int prev_env prev_env 0 = ;
int env env environment ? = ;
# tcc_cc.c 1082
do
{
env ? 0 != ! if { break }
# tcc_cc.c 1083
# tcc_cc.c 1084
env ->s14_m_name ? name ? eqstr () if
{
# tcc_cc.c 1085
env ? return
}
# tcc_cc.c 1086
prev_env env ? = ;
# tcc_cc.c 1087
env env ->s14_m_next ? = ;
}
# tcc_cc.c 1089
create ?1 char ! if
{
# tcc_cc.c 1090
0 return
}
# tcc_cc.c 1091
env 56 malloc () = ;
# tcc_cc.c 1092
env ->s14_m_name name ? copystr () = ;
# tcc_cc.c 1093
env ->s14_m_nr_args 0 = ;
# tcc_cc.c 1094
env ->s14_m_tokens 0 = ;
# tcc_cc.c 1095
env ->s14_m_next 0 = ;
# tcc_cc.c 1096
prev_env ? 0 == if
{
# tcc_cc.c 1097
# tcc_cc.c 1098
environment env ? = ;
}
else
{
# tcc_cc.c 1101
# tcc_cc.c 1102
prev_env ->s14_m_next env ? = ;
}
# tcc_cc.c 1104
env ? return
0 return
}
void del_env
{
int name name =:
int prev_env prev_env 0 = ;
int env env environment ? = ;
# tcc_cc.c 1111
do
{
env ? 0 != ! if { break }
# tcc_cc.c 1112
# tcc_cc.c 1113
env ->s14_m_name ? name ? eqstr () if
{
# tcc_cc.c 1114
# tcc_cc.c 1115
prev_env ? 0 == if
{
# tcc_cc.c 1116
# tcc_cc.c 1117
environment environment ->s14_m_next ? = ;
}
else
{
# tcc_cc.c 1120
# tcc_cc.c 1121
prev_env ->s14_m_next env ->s14_m_next ? = ;
}
# tcc_cc.c 1123
0 return
}
# tcc_cc.c 1125
prev_env env ? = ;
# tcc_cc.c 1126
env env ->s14_m_next ? = ;
}
0 return
}
void parse_expr_function_p ;
const s15_m_base 0
const s15_m__source_it 28
const s15_m__token_it 32
const s15_m__parse_or_expr 36
const s15_m__skip_level 40
const s15_m__if_done 44
const s15_m__if_level 84
void conditional_iterator_parse_primary
{
int it it =:
int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;
int result result 0 = ;
# tcc_cc.c 1164
it ->s15_m__token_it ->s11_m_kind ? 40 == if
{
# tcc_cc.c 1165
# tcc_cc.c 1166
it ->s15_m__token_it ? 0 token_it_next ? () ;
int parse_or_expr parse_or_expr it ->s15_m__parse_or_expr ? = ;
# tcc_cc.c 1168
result it ? parse_or_expr ? () = ;
# tcc_cc.c 1169
it ->s15_m__token_it ->s11_m_kind ? 41 == if
{
# tcc_cc.c 1170
# tcc_cc.c 1171
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
}
else
{
# tcc_cc.c 1174
it ->s15_m__token_it ->s11_m_kind ? 1033 == if
{
# tcc_cc.c 1175
# tcc_cc.c 1176
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1177
it ->s15_m__token_it ->s11_m_kind ? 40 == if
{
# tcc_cc.c 1178
# tcc_cc.c 1179
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1181
it ->s15_m__token_it ->s11_m_token ? 0 get_env () 0 != if
{
# tcc_cc.c 1182
# tcc_cc.c 1183
result 1 = ;
}
# tcc_cc.c 1185
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1186
it ->s15_m__token_it ->s11_m_kind ? 41 == if
{
# tcc_cc.c 1187
# tcc_cc.c 1188
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
}
else
{
# tcc_cc.c 1192
# tcc_cc.c 1193
it ->s15_m__token_it ->s11_m_token ? 0 get_env () 0 != if
{
# tcc_cc.c 1194
# tcc_cc.c 1195
result 1 = ;
}
# tcc_cc.c 1197
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
}
else
{
# tcc_cc.c 1200
it ->s15_m__token_it ->s11_m_kind ? 48 == if
{
# tcc_cc.c 1201
# tcc_cc.c 1202
result it ->s15_m__token_it ? token_it_int_value () = ;
# tcc_cc.c 1203
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
else
{
# tcc_cc.c 1205
it ->s15_m__token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 1206
int env env it ->s15_m__token_it ->s11_m_token ? 0 get_env () = ;
# tcc_cc.c 1208
env ? 0 != && { env ->s14_m_tokens ? 0 != } && { env ->s14_m_tokens ->s13_m_kind ? 48 == } if
{
# tcc_cc.c 1209
# tcc_cc.c 1210
result env ->s14_m_tokens ->s13_m_token ? string_int_value () = ;
}
# tcc_cc.c 1212
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
}
}
}
# tcc_cc.c 1214
result ? return
0 return
}
void conditional_iterator_parse_unary_expr
{
int it it =:
int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;
# tcc_cc.c 1227
it ->s15_m__token_it ->s11_m_kind ? 33 == if
{
# tcc_cc.c 1228
# tcc_cc.c 1229
it ->s15_m__token_it ? 0 token_it_next ? () ;
int result result it ? conditional_iterator_parse_primary () = ;
# tcc_cc.c 1231
result ? ! return
}
# tcc_cc.c 1233
it ? conditional_iterator_parse_primary () return
0 return
}
void conditional_iterator_parse_compare_expr
{
int it it =:
int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;
int value value it ? conditional_iterator_parse_unary_expr () = ;
# tcc_cc.c 1248
it ->s15_m__token_it ->s11_m_kind ? 501 == if
{
# tcc_cc.c 1249
# tcc_cc.c 1250
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1251
value ? it ? conditional_iterator_parse_unary_expr () == return
}
# tcc_cc.c 1253
it ->s15_m__token_it ->s11_m_kind ? 502 == if
{
# tcc_cc.c 1254
# tcc_cc.c 1255
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1256
value ? it ? conditional_iterator_parse_unary_expr () != return
}
# tcc_cc.c 1258
value ? return
0 return
}
void conditional_iterator_parse_and_expr
{
int it it =:
int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;
int value value it ? conditional_iterator_parse_compare_expr () = ;
# tcc_cc.c 1269
do
{
it ->s15_m__token_it ->s11_m_kind ? 800 38 + == ! if { break }
# tcc_cc.c 1270
# tcc_cc.c 1271
it ->s15_m__token_it ? 0 token_it_next ? () ;
int value2 value2 it ? conditional_iterator_parse_compare_expr () = ;
# tcc_cc.c 1273
value value ? && { value2 ? } = ;
}
# tcc_cc.c 1275
value ? return
0 return
}
void conditional_iterator_parse_or_expr
{
int it it =:
int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;
int value value it ? conditional_iterator_parse_and_expr () = ;
# tcc_cc.c 1286
do
{
it ->s15_m__token_it ->s11_m_kind ? 800 124 + == ! if { break }
# tcc_cc.c 1287
# tcc_cc.c 1288
it ->s15_m__token_it ? 0 token_it_next ? () ;
int value2 value2 it ? conditional_iterator_parse_and_expr () = ;
# tcc_cc.c 1290
value value ? || { value2 ? } = ;
}
# tcc_cc.c 1292
value ? return
0 return
}
int include_path
int end_include_prefix
void conditional_iterator_next
{
int dummy dummy =:
int token_it token_it =:
int it it token_it ? = ;
int token_it_next token_it_next it ->s15_m__token_it ->s11_m_next ? = ;
int kind
int value value 0 = ;
int prev_token
int env
int token
int input_it
int splice_it
int comment_it
# tcc_cc.c 1312
it ->s15_m__token_it ? 1 token_it_next ? () ;
# tcc_cc.c 1313
do
{
1 ! if { break }
# tcc_cc.c 1314
# tcc_cc.c 1317
kind it ->s15_m__token_it ->s11_m_kind ? = ;
# tcc_cc.c 1318
it ->s15_m__skip_level ?1 char 0 >s if
{
# tcc_cc.c 1319
# tcc_cc.c 1320
kind ? 1034 == || { kind ? 1035 == } || { kind ? 1036 == } if
{
# tcc_cc.c 1321
# tcc_cc.c 1322
it ->s15_m__skip_level it ->s15_m__skip_level ?1 char 1 + =1 ;
}
else
{
# tcc_cc.c 1324
kind ? 1031 == if
{
# tcc_cc.c 1325
# tcc_cc.c 1326
it ->s15_m__skip_level it ->s15_m__skip_level ?1 char 1 - =1 ;
# tcc_cc.c 1327
it ->s15_m__skip_level ?1 char 0 == if
{
# tcc_cc.c 1328
# tcc_cc.c 1329
it ->s15_m__if_level it ->s15_m__if_level ? 1 - = ;
}
}
else
{
# tcc_cc.c 1332
kind ? 1029 == if
{
# tcc_cc.c 1333
# tcc_cc.c 1334
it ->s15_m__skip_level ?1 char 1 == if
{
# tcc_cc.c 1335
# tcc_cc.c 1336
it ->s15_m__if_done it ->s15_m__if_level ? + ?1 char 0 == if
{
# tcc_cc.c 1337
# tcc_cc.c 1338
it ->s15_m__skip_level 0 =1 ;
}
}
}
else
{
# tcc_cc.c 1342
kind ? 1030 == if
{
# tcc_cc.c 1343
# tcc_cc.c 1344
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1345
value it ? conditional_iterator_parse_or_expr () = ;
# tcc_cc.c 1346
it ->s15_m__skip_level ?1 char 1 == if
{
# tcc_cc.c 1347
# tcc_cc.c 1348
it ->s15_m__if_done it ->s15_m__if_level ? + ?1 char 0 == if
{
# tcc_cc.c 1349
# tcc_cc.c 1350
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1351
value ? if
{
# tcc_cc.c 1352
# tcc_cc.c 1353
it ->s15_m__skip_level 0 =1 ;
# tcc_cc.c 1354
it ->s15_m__if_done it ->s15_m__if_level ? + 1 =1 ;
}
}
}
}
}
}
}
# tcc_cc.c 1359
it ->s15_m__token_it ? 1 token_it_next ? () ;
}
else
{
# tcc_cc.c 1361
kind ? 1035 == || { kind ? 1036 == } if
{
# tcc_cc.c 1362
# tcc_cc.c 1363
it ->s15_m__token_it ? 1 token_it_next ? () ;
# tcc_cc.c 1364
it ->s15_m__if_level it ->s15_m__if_level ? 1 + = ;
# tcc_cc.c 1365
it ->s15_m__token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 1366
# tcc_cc.c 1369
it ->s15_m__token_it ->s11_m_token ? 0 get_env () 0 != kind ? 1035 == == if
{
# tcc_cc.c 1370
# tcc_cc.c 1371
it ->s15_m__if_done it ->s15_m__if_level ? + 1 =1 ;
}
else
{
# tcc_cc.c 1374
# tcc_cc.c 1375
it ->s15_m__if_done it ->s15_m__if_level ? + 0 =1 ;
# tcc_cc.c 1376
it ->s15_m__skip_level 1 =1 ;
}
# tcc_cc.c 1378
it ->s15_m__token_it ? 1 token_it_next ? () ;
}
}
else
{
# tcc_cc.c 1381
kind ? 1034 == if
{
# tcc_cc.c 1382
# tcc_cc.c 1383
it ->s15_m__token_it ? 1 token_it_next ? () ;
# tcc_cc.c 1384
it ->s15_m__if_level it ->s15_m__if_level ? 1 + = ;
# tcc_cc.c 1385
it ? conditional_iterator_parse_or_expr () if
{
# tcc_cc.c 1386
# tcc_cc.c 1387
it ->s15_m__if_done it ->s15_m__if_level ? + 1 =1 ;
}
else
{
# tcc_cc.c 1390
# tcc_cc.c 1391
it ->s15_m__if_done it ->s15_m__if_level ? + 0 =1 ;
# tcc_cc.c 1392
it ->s15_m__skip_level 1 =1 ;
}
# tcc_cc.c 1394
it ->s15_m__token_it ? 1 token_it_next ? () ;
}
else
{
# tcc_cc.c 1396
kind ? 1029 == || { kind ? 1030 == } if
{
# tcc_cc.c 1397
# tcc_cc.c 1398
it ->s15_m__skip_level 1 =1 ;
# tcc_cc.c 1399
do
{
it ->s15_m__token_it ->s11_m_kind ? 10 == ! if { break }
# tcc_cc.c 1400
# tcc_cc.c 1401
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
# tcc_cc.c 1403
it ->s15_m__token_it ? 1 token_it_next ? () ;
}
else
{
# tcc_cc.c 1405
kind ? 1031 == if
{
# tcc_cc.c 1406
# tcc_cc.c 1407
it ->s15_m__if_level it ->s15_m__if_level ? 1 - = ;
# tcc_cc.c 1408
it ->s15_m__token_it ? 1 token_it_next ? () ;
}
else
{
# tcc_cc.c 1410
kind ? 1032 == if
{
# tcc_cc.c 1411
# tcc_cc.c 1412
prev_token 0 = ;
# tcc_cc.c 1413
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1414
env it ->s15_m__token_it ->s11_m_token ? 1 get_env () = ;
# tcc_cc.c 1415
it ->s15_m__source_it ->s10_m_base s6_m_ch + ?1 char 40 == if
{
# tcc_cc.c 1416
# tcc_cc.c 1417
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1418
do
{
1 ! if { break }
# tcc_cc.c 1419
# tcc_cc.c 1420
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1421
env ->s14_m_args env ->s14_m_nr_args ? 4 * + it ->s15_m__token_it ->s11_m_token ? copystr () = ;
# tcc_cc.c 1422
env ->s14_m_nr_args env ->s14_m_nr_args ? 1 + = ;
# tcc_cc.c 1423
it ->s15_m__token_it ? 0 token_it_next ? () ;
# tcc_cc.c 1424
it ->s15_m__token_it ->s11_m_kind ? 44 != if
{
# tcc_cc.c 1425
# tcc_cc.c 1426
break
}
}
# tcc_cc.c 1429
it ->s15_m__token_it ->s11_m_kind ? 41 == if
{
# tcc_cc.c 1430
# tcc_cc.c 1431
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
}
else
{
# tcc_cc.c 1435
# tcc_cc.c 1436
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
# tcc_cc.c 1438
do
{
it ->s15_m__token_it ->s11_m_kind ? 10 != ! if { break }
# tcc_cc.c 1439
# tcc_cc.c 1440
token it ->s15_m__token_it ? new_token_from_it () = ;
# tcc_cc.c 1441
prev_token ? 0 == if
{
# tcc_cc.c 1442
# tcc_cc.c 1443
env ->s14_m_tokens token ? = ;
}
else
{
# tcc_cc.c 1446
# tcc_cc.c 1447
prev_token ->s13_m_next token ? = ;
}
# tcc_cc.c 1449
prev_token token ? = ;
# tcc_cc.c 1450
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
# tcc_cc.c 1452
it ->s15_m__token_it ? 1 token_it_next ? () ;
}
else
{
# tcc_cc.c 1454
kind ? 1038 == if
{
# tcc_cc.c 1455
# tcc_cc.c 1456
it ->s15_m__token_it ? 1 token_it_next ? () ;
# tcc_cc.c 1457
it ->s15_m__token_it ->s11_m_token ? del_env () ;
# tcc_cc.c 1458
it ->s15_m__token_it ? 1 token_it_next ? () ;
}
else
{
# tcc_cc.c 1460
kind ? 1037 == if
{
# tcc_cc.c 1461
# tcc_cc.c 1462
it ->s15_m__token_it ? 1 token_it_next ? () ;
# tcc_cc.c 1463
it ->s15_m__token_it ->s11_m_kind ? 34 == if
{
# tcc_cc.c 1464
# tcc_cc.c 1465
end_include_prefix ? it ->s15_m__token_it ->s11_m_token ? strcpy () ;
# tcc_cc.c 1466
do
{
it ->s15_m__token_it ->s11_m_kind ? 10 != ! if { break }
# tcc_cc.c 1467
# tcc_cc.c 1468
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
# tcc_cc.c 1471
input_it include_path ? new_file_iterator () = ;
# tcc_cc.c 1472
input_it ->s7_m_base s6_m_ch + ?1 char 0 != if
{
# tcc_cc.c 1473
# tcc_cc.c 1474
splice_it input_it ->s7_m_base new_line_splice_iterator () = ;
# tcc_cc.c 1475
comment_it splice_it ->s8_m_base new_comment_strip_iterator () = ;
# tcc_cc.c 1476
it ->s15_m__source_it ? comment_it ->s9_m_base include_iterator_add () ;
# tcc_cc.c 1477
it ->s15_m__token_it ? 1 token_it_next ? () ;
}
else
{
# tcc_cc.c 1480
# tcc_cc.c 1481
it ->s15_m__token_it ? 1 token_it_next ? () ;
}
}
else
{
# tcc_cc.c 1485
# tcc_cc.c 1486
do
{
it ->s15_m__token_it ->s11_m_kind ? 10 != ! if { break }
# tcc_cc.c 1487
# tcc_cc.c 1488
it ->s15_m__token_it ? 0 token_it_next ? () ;
}
# tcc_cc.c 1490
it ->s15_m__token_it ? 1 token_it_next ? () ;
}
}
else
{
# tcc_cc.c 1493
kind ? 1039 == if
{
# tcc_cc.c 1494
# tcc_cc.c 1495
it ->s15_m_base s11_m_kind + it ->s15_m__token_it ->s11_m_kind ? = ;
# tcc_cc.c 1496
it ->s15_m_base s11_m_token + it ->s15_m__token_it ->s11_m_token ? = ;
# tcc_cc.c 1497
it ->s15_m_base s11_m_length + it ->s15_m__token_it ->s11_m_length ? = ;
# tcc_cc.c 1498
it ->s15_m_base s11_m_filename + it ->s15_m__token_it ->s11_m_filename ? = ;
# tcc_cc.c 1499
it ->s15_m_base s11_m_line + it ->s15_m__token_it ->s11_m_line ? = ;
# tcc_cc.c 1500
it ->s15_m_base s11_m_column + it ->s15_m__token_it ->s11_m_column ? = ;
# tcc_cc.c 1501
token_it ? return
}
else
{
# tcc_cc.c 1504
# tcc_cc.c 1505
it ->s15_m_base s11_m_kind + it ->s15_m__token_it ->s11_m_kind ? = ;
# tcc_cc.c 1506
it ->s15_m_base s11_m_token + it ->s15_m__token_it ->s11_m_token ? = ;
# tcc_cc.c 1507
it ->s15_m_base s11_m_length + it ->s15_m__token_it ->s11_m_length ? = ;
# tcc_cc.c 1508
it ->s15_m_base s11_m_filename + it ->s15_m__token_it ->s11_m_filename ? = ;
# tcc_cc.c 1509
it ->s15_m_base s11_m_line + it ->s15_m__token_it ->s11_m_line ? = ;
# tcc_cc.c 1510
it ->s15_m_base s11_m_column + it ->s15_m__token_it ->s11_m_column ? = ;
# tcc_cc.c 1511
token_it ? return
}
}
}
}
}
}
}
}
}
}
# tcc_cc.c 1514
token_it ? return
0 return
}
void new_conditional_iterator
{
int token_it token_it =:
int source_it source_it =:
int it it 88 malloc () = ;
# tcc_cc.c 1520
it ->s15_m__source_it source_it ? = ;
# tcc_cc.c 1521
it ->s15_m__token_it token_it ? = ;
# tcc_cc.c 1522
it ->s15_m__parse_or_expr conditional_iterator_parse_or_expr = ;
# tcc_cc.c 1523
it ->s15_m__skip_level 0 =1 ;
# tcc_cc.c 1524
it ->s15_m__if_level 0 = ;
# tcc_cc.c 1525
it ->s15_m_base s11_m_next + conditional_iterator_next = ;
# tcc_cc.c 1526
it ? return
0 return
}
const s16_m_base 0
const s16_m_param_tokens 28
const s16_m_tokens 32
const s16_m__rest_it 36
const s16_m_stringify 40
const s16_m_appended_token 44
const s16_m__macro 96
const s16_m_args 100
void expand_macro_iterator_next
{
int dummy dummy =:
int token_it token_it =:
int it it token_it ? = ;
# tcc_cc.c 1555
it ->s16_m_param_tokens ? 0 != if
{
# tcc_cc.c 1556
# tcc_cc.c 1557
token_it ->s11_m_kind it ->s16_m_stringify ?1 char if { 34 } else { it ->s16_m_param_tokens ->s13_m_kind ? } = ;
# tcc_cc.c 1558
token_it ->s11_m_token it ->s16_m_param_tokens ->s13_m_token ? = ;
# tcc_cc.c 1559
token_it ->s11_m_length it ->s16_m_param_tokens ->s13_m_length ? = ;
# tcc_cc.c 1560
token_it ->s11_m_filename it ->s16_m_param_tokens ->s13_m_filename ? = ;
# tcc_cc.c 1561
token_it ->s11_m_line it ->s16_m_param_tokens ->s13_m_line ? = ;
# tcc_cc.c 1562
token_it ->s11_m_column it ->s16_m_param_tokens ->s13_m_column ? = ;
# tcc_cc.c 1563
opt_trace_parser ?1 char if
{
# tcc_cc.c 1564
"token from arg %d %s\n" { int 2 __var_args __var_args token_it ->s11_m_kind ? = ; __var_args 4 + token_it ->s11_m_token ? 0 == if { "?" } else { token_it ->s11_m_token ? } = ; __var_args printf () } ;
}
# tcc_cc.c 1565
it ->s16_m_param_tokens it ->s16_m_param_tokens ->s13_m_next ? = ;
# tcc_cc.c 1566
token_it ? return
}
# tcc_cc.c 1569
{
do
{
# tcc_cc.c 1570
int token token it ->s16_m_tokens ? = ;
# tcc_cc.c 1572
token ? 0 == if
{
# tcc_cc.c 1573
int rest_it rest_it it ->s16_m__rest_it ? = ;
# tcc_cc.c 1575
it ? free () ;
# tcc_cc.c 1576
rest_it ? dummy ?1 char rest_it ->s11_m_next ? () return
}
# tcc_cc.c 1579
opt_trace_parser ?1 char if
{
# tcc_cc.c 1580
"token from macro %d %s\n" { int 2 __var_args __var_args token ->s13_m_kind ? = ; __var_args 4 + token ->s13_m_token ? 0 == if { "?" } else { token ->s13_m_token ? } = ; __var_args printf () } ;
}
# tcc_cc.c 1581
it ->s16_m_tokens token ->s13_m_next ? = ;
# tcc_cc.c 1582
it ->s16_m_stringify 0 =1 ;
# tcc_cc.c 1584
token ->s13_m_next ? 0 != && { token ->s13_m_next ->s13_m_kind ? 500 == } if
{
# tcc_cc.c 1585
# tcc_cc.c 1586
token_it ->s11_m_kind 105 = ;
# tcc_cc.c 1587
token_it ->s11_m_filename token ->s13_m_filename ? = ;
# tcc_cc.c 1588
token_it ->s11_m_line token ->s13_m_line ? = ;
# tcc_cc.c 1589
token_it ->s11_m_column token ->s13_m_column ? = ;
int p p 0 = ;
# tcc_cc.c 1591
{
do
{
# tcc_cc.c 1592
int s s token ->s13_m_token ? = ;
# tcc_cc.c 1594
token ->s13_m_kind ? 105 == if
{
# tcc_cc.c 1595
int nr_args nr_args it ->s16_m__macro ->s14_m_nr_args ? = ;
int i i 0 = ;
# tcc_cc.c 1598
{
do
{
i ? nr_args ? <s ! if { break }
# tcc_cc.c 1599
token ->s13_m_token ? it ->s16_m__macro ->s14_m_args i ? 4 * + ? strcmp () 0 == if
{
# tcc_cc.c 1600
break
}
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 1601
i ? nr_args ? <s if
{
# tcc_cc.c 1602
int tokens tokens it ->s16_m_args i ? 4 * + ? = ;
# tcc_cc.c 1604
tokens ? 0 == if
{
# tcc_cc.c 1605
# tcc_cc.c 1606
opt_trace_parser ?1 char if
{
# tcc_cc.c 1607
"INFO: append arg no value\n" 0 printf () ;
}
# tcc_cc.c 1608
s "" = ;
}
else
{
# tcc_cc.c 1610
tokens ->s13_m_next ? 0 != if
{
# tcc_cc.c 1611
# tcc_cc.c 1612
"ERROR: append arg more than one value\n" 0 printf () ;
# tcc_cc.c 1613
s "" = ;
}
else
{
# tcc_cc.c 1616
s tokens ->s13_m_token ? = ;
}
}
}
}
# tcc_cc.c 1619
{
do
{
s ? ?1 char 0 != ! if { break }
# tcc_cc.c 1620
p ? 50 1 - <s if
{
# tcc_cc.c 1621
it ->s16_m_appended_token p $ ? 1 + = 1 - + s ? ?1 char =1 ;
}
s $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 1622
token token ->s13_m_next ? = ;
# tcc_cc.c 1623
token ? 0 == || { token ->s13_m_kind ? 500 != } if
{
# tcc_cc.c 1624
break
}
# tcc_cc.c 1625
token token ->s13_m_next ? = ;
}
}
# tcc_cc.c 1627
it ->s16_m_tokens token ? = ;
# tcc_cc.c 1628
it ->s16_m_appended_token p ? + 0 =1 ;
# tcc_cc.c 1629
opt_trace_parser ?1 char if
{
# tcc_cc.c 1630
"INFO: Appended token '%s'\n" { int 1 __var_args __var_args it ->s16_m_appended_token = ; __var_args printf () } ;
}
# tcc_cc.c 1631
token_it ->s11_m_token it ->s16_m_appended_token = ;
# tcc_cc.c 1632
token_it ->s11_m_length p ? = ;
# tcc_cc.c 1634
token_it ? return
}
else
{
# tcc_cc.c 1637
# tcc_cc.c 1638
token ->s13_m_kind ? 35 == if
{
# tcc_cc.c 1639
# tcc_cc.c 1640
it ->s16_m_stringify 1 =1 ;
# tcc_cc.c 1641
it ->s16_m_tokens token token ->s13_m_next ? = = ;
# tcc_cc.c 1642
it ->s16_m_tokens ? 0 == if
{
# tcc_cc.c 1643
it ->s16_m__rest_it ? dummy ?1 char it ->s16_m__rest_it ->s11_m_next ? () return
}
}
# tcc_cc.c 1646
token ->s13_m_kind ? 105 == if
{
# tcc_cc.c 1647
int nr_args nr_args it ->s16_m__macro ->s14_m_nr_args ? = ;
int i i 0 = ;
# tcc_cc.c 1650
{
do
{
i ? nr_args ? <s ! if { break }
# tcc_cc.c 1651
token ->s13_m_token ? it ->s16_m__macro ->s14_m_args i ? 4 * + ? strcmp () 0 == if
{
# tcc_cc.c 1652
break
}
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 1653
i ? nr_args ? <s if
{
# tcc_cc.c 1654
int tokens tokens it ->s16_m_args i ? 4 * + ? = ;
# tcc_cc.c 1656
tokens ? 0 == if
{
# tcc_cc.c 1657
continue
}
# tcc_cc.c 1658
token_it ->s11_m_kind it ->s16_m_stringify ?1 char if { 34 } else { tokens ->s13_m_kind ? } = ;
# tcc_cc.c 1659
token_it ->s11_m_token tokens ->s13_m_token ? = ;
# tcc_cc.c 1660
token_it ->s11_m_length tokens ->s13_m_length ? = ;
# tcc_cc.c 1661
token_it ->s11_m_filename tokens ->s13_m_filename ? = ;
# tcc_cc.c 1662
token_it ->s11_m_line tokens ->s13_m_line ? = ;
# tcc_cc.c 1663
token_it ->s11_m_column token ->s13_m_column ? = ;
# tcc_cc.c 1664
it ->s16_m_param_tokens tokens ->s13_m_next ? = ;
# tcc_cc.c 1665
it ->s16_m_tokens token ->s13_m_next ? = ;
# tcc_cc.c 1666
token_it ? return
}
}
# tcc_cc.c 1669
token_it ->s11_m_kind it ->s16_m_stringify ?1 char if { 34 } else { token ->s13_m_kind ? } = ;
# tcc_cc.c 1670
token_it ->s11_m_token token ->s13_m_token ? = ;
# tcc_cc.c 1671
token_it ->s11_m_length token ->s13_m_length ? = ;
# tcc_cc.c 1672
token_it ->s11_m_filename token ->s13_m_filename ? = ;
# tcc_cc.c 1673
token_it ->s11_m_line token ->s13_m_line ? = ;
# tcc_cc.c 1674
token_it ->s11_m_column token ->s13_m_column ? = ;
# tcc_cc.c 1676
token_it ? return
}
}
}
0 return
}
void new_exapnd_macro_iterator
{
int rest_it rest_it =:
int args args =:
int macro macro =:
int it it 140 malloc () = ;
# tcc_cc.c 1684
it ->s16_m_base s11_m_next + expand_macro_iterator_next = ;
# tcc_cc.c 1685
it ->s16_m_param_tokens 0 = ;
# tcc_cc.c 1686
it ->s16_m_tokens macro ->s14_m_tokens ? = ;
# tcc_cc.c 1687
it ->s16_m__rest_it rest_it ? = ;
# tcc_cc.c 1688
it ->s16_m__macro macro ? = ;
# tcc_cc.c 1689
{
int arg_nr arg_nr 0 = ;
do
{
arg_nr ? macro ->s14_m_nr_args ? <s ! if { break }
# tcc_cc.c 1690
it ->s16_m_args arg_nr ? 4 * + args ? arg_nr ? 4 * + ? = ;
arg_nr $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 1691
it ->s16_m_base 0 expand_macro_iterator_next () return
0 return
}
const s17_m_base 0
const s17_m__source_it 28
void expand_iterator_next
{
int dummy dummy =:
int token_it token_it =:
int it it token_it ? = ;
int source_it source_it it ->s17_m__source_it ? = ;
# tcc_cc.c 1711
source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
# tcc_cc.c 1713
{
int go go 1 =1 ;
do
{
go ?1 char ! if { break }
# tcc_cc.c 1714
# tcc_cc.c 1715
go 0 =1 ;
# tcc_cc.c 1716
source_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 1717
int macro macro source_it ->s11_m_token ? 0 get_env () = ;
# tcc_cc.c 1719
macro ? 0 != if
{
# tcc_cc.c 1720
# tcc_cc.c 1721
go 1 =1 ;
# tcc_cc.c 1722
opt_trace_parser ?1 char if
{
# tcc_cc.c 1723
"Expand token %s %d: " { int 2 __var_args __var_args source_it ->s11_m_token ? = ; __var_args 4 + macro ->s14_m_nr_args ? = ; __var_args printf () } ;
}
int 10 args
int nr_args nr_args 0 = ;
# tcc_cc.c 1726
macro ->s14_m_nr_args ? 0 >s if
{
# tcc_cc.c 1727
# tcc_cc.c 1728
source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
# tcc_cc.c 1729
source_it ->s11_m_kind ? 40 != if
{
# tcc_cc.c 1730
# tcc_cc.c 1731
"ERROR: No arguments for %s when parameters (%d) are expected\n" { int 2 __var_args __var_args macro ->s14_m_name ? = ; __var_args 4 + macro ->s14_m_nr_args ? = ; __var_args printf () } ;
# tcc_cc.c 1732
continue
}
# tcc_cc.c 1734
do
{
# tcc_cc.c 1735
# tcc_cc.c 1736
source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
# tcc_cc.c 1737
args nr_args ? 4 * + 0 = ;
int ref_tokens ref_tokens args nr_args ? 4 * + = ;
# tcc_cc.c 1739
nr_args $ ? 1 + = 1 - ;
int 5 stack
int stack_depth stack_depth 0 = ;
# tcc_cc.c 1742
do
{
stack_depth ? 0 >s || { source_it ->s11_m_kind ? 0 != && { source_it ->s11_m_kind ? 44 != } && { source_it ->s11_m_kind ? 41 != } } ! if { break }
# tcc_cc.c 1743
# tcc_cc.c 1744
ref_tokens ? source_it ? new_token_from_it () = ;
# tcc_cc.c 1745
ref_tokens ref_tokens ? ->s13_m_next = ;
# tcc_cc.c 1746
source_it ->s11_m_kind ? 40 == if
{
# tcc_cc.c 1747
stack stack_depth $ ? 1 + = 1 - + 41 =1 ;
}
else
{
# tcc_cc.c 1748
source_it ->s11_m_kind ? 123 == if
{
# tcc_cc.c 1749
stack stack_depth $ ? 1 + = 1 - + 125 =1 ;
}
else
{
# tcc_cc.c 1750
source_it ->s11_m_kind ? 91 == if
{
# tcc_cc.c 1751
stack stack_depth $ ? 1 + = 1 - + 93 =1 ;
}
else
{
# tcc_cc.c 1752
stack_depth ? 0 >s && { source_it ->s11_m_kind ? stack stack_depth ? 1 - + ?1 char == } if
{
# tcc_cc.c 1753
stack_depth $ ? 1 - = 1 + ;
}
}
}
}
# tcc_cc.c 1754
source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
}
source_it ->s11_m_kind ? 44 == ! if { break }
}
}
# tcc_cc.c 1759
macro ->s14_m_nr_args ? nr_args ? != if
{
# tcc_cc.c 1760
# tcc_cc.c 1761
"ERROR: Number arguments (%d) for %s does not match parameters (%d)\n" { int 3 __var_args __var_args nr_args ? = ; __var_args 4 + macro ->s14_m_name ? = ; __var_args 8 + macro ->s14_m_nr_args ? = ; __var_args printf () } ;
# tcc_cc.c 1762
source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
}
else
{
# tcc_cc.c 1764
macro ->s14_m_tokens ? 0 == if
{
# tcc_cc.c 1765
source_it source_it ? dummy ?1 char source_it ->s11_m_next ? () = ;
}
else
{
# tcc_cc.c 1767
source_it macro ? args source_it ? new_exapnd_macro_iterator () = ;
}
}
}
}
# tcc_cc.c 1770
it ->s17_m__source_it source_it ? = ;
}
}
# tcc_cc.c 1773
token_it ->s11_m_kind source_it ->s11_m_kind ? = ;
# tcc_cc.c 1774
token_it ->s11_m_token source_it ->s11_m_token ? = ;
# tcc_cc.c 1775
token_it ->s11_m_length source_it ->s11_m_length ? = ;
# tcc_cc.c 1776
token_it ->s11_m_filename source_it ->s11_m_filename ? = ;
# tcc_cc.c 1777
token_it ->s11_m_line source_it ->s11_m_line ? = ;
# tcc_cc.c 1778
token_it ->s11_m_column source_it ->s11_m_column ? = ;
# tcc_cc.c 1780
token_it ? return
0 return
}
void new_expand_iterator
{
int source_it source_it =:
int it it 32 malloc () = ;
# tcc_cc.c 1786
it ->s17_m__source_it source_it ? = ;
# tcc_cc.c 1787
it ->s17_m_base s11_m_next + expand_iterator_next = ;
# tcc_cc.c 1788
it ? return
0 return
}
int token_it
void output_preprocessor
{
int filename filename =:
int fout fout filename ? "w" fopen () = ;
# tcc_cc.c 1798
fout ? 0 == if
{
# tcc_cc.c 1799
0 return
}
# tcc_cc.c 1800
token_it token_it ? 1 token_it ->s11_m_next ? () = ;
int prev_file prev_file 0 = ;
int prev_line prev_line 0 = ;
# tcc_cc.c 1804
do
{
token_it ->s11_m_kind ? 0 != ! if { break }
# tcc_cc.c 1805
# tcc_cc.c 1806
token_it ->s11_m_filename ? prev_file ? != || { token_it ->s11_m_line ? prev_line ? != } if
{
# tcc_cc.c 1807
# tcc_cc.c 1808
fout ? "\n%s: %d" { int 2 __var_args __var_args token_it ->s11_m_filename ? = ; __var_args 4 + token_it ->s11_m_line ? = ; __var_args fprintf () } ;
# tcc_cc.c 1809
{
int i i 0 = ;
do
{
i ? token_it ->s11_m_column ? <s ! if { break }
# tcc_cc.c 1810
32 fout ? fputc () ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 1811
prev_file token_it ->s11_m_filename ? = ;
# tcc_cc.c 1812
prev_line token_it ->s11_m_line ? = ;
}
# tcc_cc.c 1814
32 fout ? fputc () ;
# tcc_cc.c 1815
token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 1816
# tcc_cc.c 1817
token_it ->s11_m_token ? fout ? fputs () ;
}
else
{
# tcc_cc.c 1819
token_it ->s11_m_kind ? 34 == || { token_it ->s11_m_kind ? 39 == } if
{
# tcc_cc.c 1820
int strsep strsep token_it ->s11_m_kind ? =1 ;
# tcc_cc.c 1822
strsep ?1 char fout ? fputc () ;
# tcc_cc.c 1823
{
int i i 0 = ;
do
{
i ? token_it ->s11_m_length ? <s ! if { break }
# tcc_cc.c 1824
int ch ch token_it ->s11_m_token ? i ? + ?1 char =1 ;
# tcc_cc.c 1826
ch ?1 char 10 == if
{
# tcc_cc.c 1827
"\\n" fout ? fputs () ;
}
else
{
# tcc_cc.c 1828
ch ?1 char 13 == if
{
# tcc_cc.c 1829
"\\r" fout ? fputs () ;
}
else
{
# tcc_cc.c 1830
ch ?1 char 9 == if
{
# tcc_cc.c 1831
"\\t" fout ? fputs () ;
}
else
{
# tcc_cc.c 1832
ch ?1 char 0 == if
{
# tcc_cc.c 1833
"\\0" fout ? fputs () ;
}
else
{
# tcc_cc.c 1834
32 ch ?1 char <=s && { ch ?1 char 127 <s } if
{
# tcc_cc.c 1835
ch ?1 char fout ? fputc () ;
}
else
{
# tcc_cc.c 1837
# tcc_cc.c 1838
"\\" fout ? fputs () ;
# tcc_cc.c 1839
ch ?1 char fout ? fputc () ;
}
}
}
}
}
i i ? 1 + = ;
}
}
# tcc_cc.c 1842
strsep ?1 char fout ? fputc () ;
}
else
{
# tcc_cc.c 1844
token_it ->s11_m_kind ? 48 == if
{
# tcc_cc.c 1845
# tcc_cc.c 1846
token_it ->s11_m_token ? fout ? fputs () ;
}
else
{
# tcc_cc.c 1848
token_it ->s11_m_kind ? 127 <s if
{
# tcc_cc.c 1849
# tcc_cc.c 1850
token_it ->s11_m_kind ? fout ? fputc () ;
}
else
{
# tcc_cc.c 1852
token_it ->s11_m_kind ? 1000 >=s if
{
# tcc_cc.c 1853
token_it ->s11_m_token ? fout ? fputs () ;
}
else
{
# tcc_cc.c 1854
token_it ->s11_m_kind ? 500 == if
{
# tcc_cc.c 1854
"##" fout ? fputs () ;
}
else
{
# tcc_cc.c 1855
token_it ->s11_m_kind ? 501 == if
{
# tcc_cc.c 1855
"==" fout ? fputs () ;
}
else
{
# tcc_cc.c 1856
token_it ->s11_m_kind ? 502 == if
{
# tcc_cc.c 1856
"!=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1857
token_it ->s11_m_kind ? 503 == if
{
# tcc_cc.c 1857
"<=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1858
token_it ->s11_m_kind ? 504 == if
{
# tcc_cc.c 1858
">=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1859
token_it ->s11_m_kind ? 505 == if
{
# tcc_cc.c 1859
"++" fout ? fputs () ;
}
else
{
# tcc_cc.c 1860
token_it ->s11_m_kind ? 506 == if
{
# tcc_cc.c 1860
"--" fout ? fputs () ;
}
else
{
# tcc_cc.c 1861
token_it ->s11_m_kind ? 507 == if
{
# tcc_cc.c 1861
"->" fout ? fputs () ;
}
else
{
# tcc_cc.c 1862
token_it ->s11_m_kind ? 600 42 + == if
{
# tcc_cc.c 1862
"*=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1863
token_it ->s11_m_kind ? 600 47 + == if
{
# tcc_cc.c 1863
"/=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1864
token_it ->s11_m_kind ? 600 37 + == if
{
# tcc_cc.c 1864
"%%=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1865
token_it ->s11_m_kind ? 600 43 + == if
{
# tcc_cc.c 1865
"+=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1866
token_it ->s11_m_kind ? 600 45 + == if
{
# tcc_cc.c 1866
"-=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1867
token_it ->s11_m_kind ? 600 60 + == if
{
# tcc_cc.c 1867
"<<=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1868
token_it ->s11_m_kind ? 600 62 + == if
{
# tcc_cc.c 1868
">>=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1869
token_it ->s11_m_kind ? 600 94 + == if
{
# tcc_cc.c 1869
"^=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1870
token_it ->s11_m_kind ? 600 38 + == if
{
# tcc_cc.c 1870
"&=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1871
token_it ->s11_m_kind ? 600 124 + == if
{
# tcc_cc.c 1871
"|=" fout ? fputs () ;
}
else
{
# tcc_cc.c 1872
token_it ->s11_m_kind ? 800 60 + == if
{
# tcc_cc.c 1872
"<<" fout ? fputs () ;
}
else
{
# tcc_cc.c 1873
token_it ->s11_m_kind ? 800 62 + == if
{
# tcc_cc.c 1873
">>" fout ? fputs () ;
}
else
{
# tcc_cc.c 1874
token_it ->s11_m_kind ? 800 38 + == if
{
# tcc_cc.c 1874
"&&" fout ? fputs () ;
}
else
{
# tcc_cc.c 1875
token_it ->s11_m_kind ? 800 124 + == if
{
# tcc_cc.c 1875
"||" fout ? fputs () ;
}
else
{
# tcc_cc.c 1876
"????" fout ? fputs () ;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
# tcc_cc.c 1878
token_it token_it ? 1 token_it ->s11_m_next ? () = ;
}
# tcc_cc.c 1881
fout ? "\n\nDone\n" 0 fprintf () ;
# tcc_cc.c 1882
fout ? fclose () ;
0 return
}
int BT_VOID
int BT_S8
int BT_U8
int BT_S16
int BT_U16
int BT_S32
int BT_U32
int BT_S64
int BT_U64
int BT_F
int BT_DF
int BT_JMP_BUF
int BT_FILE
int BT_TIME_T
int TYPE_KIND_BASE
int TYPE_KIND_STRUCT
int TYPE_KIND_UNION
int TYPE_KIND_POINTER
int TYPE_KIND_ARRAY
int TYPE_KIND_FUNCTION
const s18_m_kind 0
const s18_m_base_type 4
const s18_m_size 8
const s18_m_nr_members 12
const s18_m_members 16
const s18_m_nr_decls 20
const s18_m_decls 24
const s18_m_nr_elems 28
const s18_m_typedef_decl 32
void new_type
{
int nr_members nr_members =:
int size size =:
int kind kind =:
int type type 36 malloc () = ;
# tcc_cc.c 1939
type ->s18_m_kind kind ? = ;
# tcc_cc.c 1940
type ->s18_m_base_type 0 = ;
# tcc_cc.c 1941
type ->s18_m_size size ? = ;
# tcc_cc.c 1942
type ->s18_m_nr_members nr_members ? = ;
# tcc_cc.c 1943
nr_members ? 0 >s if
{
# tcc_cc.c 1944
# tcc_cc.c 1945
type ->s18_m_members nr_members ? 4 * malloc () = ;
# tcc_cc.c 1946
{
int i i 0 = ;
do
{
i ? nr_members ? <s ! if { break }
# tcc_cc.c 1947
type ->s18_m_members ? i ? 4 * + 0 = ;
i $ ? 1 + = 1 - ;
}
}
}
else
{
# tcc_cc.c 1950
type ->s18_m_members 0 = ;
}
# tcc_cc.c 1951
type ->s18_m_nr_decls 0 = ;
# tcc_cc.c 1952
type ->s18_m_decls 0 = ;
# tcc_cc.c 1953
type ->s18_m_nr_elems 0 = ;
# tcc_cc.c 1954
type ->s18_m_typedef_decl 0 = ;
# tcc_cc.c 1955
type ? return
0 return
}
void type_is_integer
{
int type type =:
# tcc_cc.c 1960
type ? 0 != && { type ->s18_m_kind ? TYPE_KIND_BASE ? == } && { type ->s18_m_base_type ? 1 & 1 == } return
0 return
}
void type_is_signed_integer
{
int type type =:
# tcc_cc.c 1965
type ? 0 != && { type ->s18_m_kind ? TYPE_KIND_BASE ? == } && { type ->s18_m_base_type ? 3 & 3 == } return
0 return
}
void type_is_pointer
{
int type type =:
# tcc_cc.c 1970
type ? 0 != && { type ->s18_m_kind ? TYPE_KIND_POINTER ? == || { type ->s18_m_kind ? TYPE_KIND_ARRAY ? == } } return
0 return
}
void type_set_decls
{
int decls decls =:
int nr_decls nr_decls =:
int type type =:
# tcc_cc.c 1975
nr_decls ? type ->s18_m_nr_decls ? >=s if
{
# tcc_cc.c 1976
# tcc_cc.c 1977
type ->s18_m_nr_decls nr_decls ? = ;
# tcc_cc.c 1978
type ->s18_m_decls nr_decls ? 4 * malloc () = ;
}
# tcc_cc.c 1980
{
int i i 0 = ;
do
{
i ? nr_decls ? <s ! if { break }
# tcc_cc.c 1981
type ->s18_m_decls ? i ? 4 * + decls ? i ? 4 * + ? = ;
i $ ? 1 + = 1 - ;
}
}
0 return
}
int base_type_void
int base_type_S8
int base_type_U8
int base_type_S16
int base_type_U16
int base_type_S32
int base_type_U32
int base_type_S64
int base_type_U64
int base_type_float
int base_type_double
int base_type_jmp_buf
int base_type_file
int base_type_time_t
int base_type_bool
int type_char_ptr
void new_base_type
{
int base base =:
int size size 4 = ;
# tcc_cc.c 2004
base ? 2 >> do
{
$ 1 == if
{
;
# tcc_cc.c 2006
size 1 = ;
# tcc_cc.c 2006
break
# tcc_cc.c 2007
}
$ 2 == if
{
;
# tcc_cc.c 2007
size 2 = ;
# tcc_cc.c 2007
break
# tcc_cc.c 2008
}
$ 3 == if
{
;
# tcc_cc.c 2008
size 4 = ;
# tcc_cc.c 2008
break
# tcc_cc.c 2009
}
$ 4 == if
{
;
# tcc_cc.c 2009
size 4 = ;
# tcc_cc.c 2009
break
# tcc_cc.c 2010
}
$ 5 == if
{
;
# tcc_cc.c 2010
size 4 = ;
# tcc_cc.c 2010
break
# tcc_cc.c 2011
}
$ 6 == if
{
;
# tcc_cc.c 2011
size 4 = ;
# tcc_cc.c 2011
break
# tcc_cc.c 2012
}
; break
}
int type type TYPE_KIND_BASE ? size ? 0 new_type () = ;
# tcc_cc.c 2014
type ->s18_m_base_type base ? = ;
# tcc_cc.c 2015
type ? return
0 return
}
void define_base_types
{
# tcc_cc.c 2020
base_type_void BT_VOID ? new_base_type () = ;
# tcc_cc.c 2021
base_type_S8 BT_S8 ? new_base_type () = ;
# tcc_cc.c 2022
base_type_U8 BT_U8 ? new_base_type () = ;
# tcc_cc.c 2023
base_type_S16 BT_S16 ? new_base_type () = ;
# tcc_cc.c 2024
base_type_U16 BT_U16 ? new_base_type () = ;
# tcc_cc.c 2025
base_type_S32 BT_S32 ? new_base_type () = ;
# tcc_cc.c 2026
base_type_U32 BT_U32 ? new_base_type () = ;
# tcc_cc.c 2027
base_type_S64 BT_S64 ? new_base_type () = ;
# tcc_cc.c 2028
base_type_U64 BT_U64 ? new_base_type () = ;
# tcc_cc.c 2029
base_type_float BT_F ? new_base_type () = ;
# tcc_cc.c 2030
base_type_double BT_DF ? new_base_type () = ;
# tcc_cc.c 2031
base_type_jmp_buf BT_JMP_BUF ? new_base_type () = ;
# tcc_cc.c 2032
base_type_file BT_FILE ? new_base_type () = ;
# tcc_cc.c 2033
base_type_time_t BT_TIME_T ? new_base_type () = ;
# tcc_cc.c 2034
base_type_bool BT_U32 ? new_base_type () = ;
# tcc_cc.c 2035
type_char_ptr TYPE_KIND_POINTER ? 4 1 new_type () = ;
# tcc_cc.c 2036
type_char_ptr ->s18_m_members ? 0 4 * + base_type_S8 ? = ;
0 return
}
void base_signed_type
{
int int_type int_type =:
# tcc_cc.c 2041
int_type ? base_type_U8 ? == if
{
# tcc_cc.c 2042
base_type_S8 ? return
}
# tcc_cc.c 2043
int_type ? base_type_U16 ? == if
{
# tcc_cc.c 2044
base_type_S16 ? return
}
# tcc_cc.c 2045
int_type ? base_type_U32 ? == if
{
# tcc_cc.c 2046
base_type_S32 ? return
}
# tcc_cc.c 2047
int_type ? base_type_U64 ? == if
{
# tcc_cc.c 2048
base_type_S64 ? return
}
# tcc_cc.c 2049
int_type ? return
0 return
}
const s19_m_kind 0
const s19_m_int_val 4
const s19_m_str_val 8
const s19_m_type 12
const s19_m_filename 16
const s19_m_line 20
const s19_m_column 24
const s19_m_nr_children 28
const s19_m_children 32
int 26 token_it_pos_buffer
void token_it_pos
{
# tcc_cc.c 2087
token_it_pos_buffer 100 "%s: %d.%d" { int 3 __var_args __var_args token_it ->s11_m_filename ? = ; __var_args 4 + token_it ->s11_m_line ? = ; __var_args 8 + token_it ->s11_m_column ? = ; __var_args snprintf () } ;
# tcc_cc.c 2088
token_it_pos_buffer 100 + 0 =1 ;
# tcc_cc.c 2089
token_it_pos_buffer return
0 return
}
int filename_for_expr
int line_for_expr
int column_for_expr
void store_pos_for_expr
{
# tcc_cc.c 2099
filename_for_expr token_it ->s11_m_filename ? = ;
# tcc_cc.c 2100
line_for_expr token_it ->s11_m_line ? = ;
# tcc_cc.c 2101
column_for_expr token_it ->s11_m_column ? = ;
0 return
}
int 26 expr_pos_buffer
void expr_pos
{
int expr expr =:
# tcc_cc.c 2108
expr ->s19_m_kind ? 32 >s && { expr ->s19_m_kind ? 127 <s } if
{
# tcc_cc.c 2109
expr_pos_buffer 100 "%s: %d.%d expr '%c " { int 4 __var_args __var_args expr ->s19_m_filename ? = ; __var_args 4 + expr ->s19_m_line ? = ; __var_args 8 + expr ->s19_m_column ? = ; __var_args 12 + expr ->s19_m_kind ? = ; __var_args snprintf () } ;
}
else
{
# tcc_cc.c 2111
expr_pos_buffer 100 "%s: %d.%d expr %d " { int 4 __var_args __var_args expr ->s19_m_filename ? = ; __var_args 4 + expr ->s19_m_line ? = ; __var_args 8 + expr ->s19_m_column ? = ; __var_args 12 + expr ->s19_m_kind ? = ; __var_args snprintf () } ;
}
# tcc_cc.c 2112
expr_pos_buffer 100 + 0 =1 ;
# tcc_cc.c 2113
expr_pos_buffer return
0 return
}
void new_expr
{
int nr_children nr_children =:
int kind kind =:
int expr expr 32 nr_children ? 4 * + malloc () = ;
# tcc_cc.c 2131
expr ->s19_m_kind kind ? = ;
# tcc_cc.c 2132
expr ->s19_m_int_val 0 = ;
# tcc_cc.c 2133
expr ->s19_m_str_val 0 = ;
# tcc_cc.c 2134
expr ->s19_m_nr_children nr_children ? = ;
# tcc_cc.c 2135
{
int i i 0 = ;
do
{
i ? nr_children ? <s ! if { break }
# tcc_cc.c 2136
expr ->s19_m_children i ? 4 * + 0 = ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 2137
expr ->s19_m_type 0 = ;
# tcc_cc.c 2139
expr ->s19_m_filename filename_for_expr ? = ;
# tcc_cc.c 2140
expr ->s19_m_line line_for_expr ? = ;
# tcc_cc.c 2141
expr ->s19_m_column column_for_expr ? = ;
# tcc_cc.c 2143
expr ? return
0 return
}
void new_expr_int_value
{
int value value =:
int expr expr 48 0 new_expr () = ;
# tcc_cc.c 2149
expr ->s19_m_int_val value ? = ;
# tcc_cc.c 2150
expr ->s19_m_type base_type_S32 ? = ;
# tcc_cc.c 2151
expr ? return
0 return
}
void expr_is_pointer_size_gt_1
{
int expr expr =:
# tcc_cc.c 2156
expr ->s19_m_type ? type_is_pointer () && { expr ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? 1 >s } return
0 return
}
void expr_inc_dec_value
{
int expr expr =:
# tcc_cc.c 2161
expr ->s19_m_type ? type_is_pointer () if { expr ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? } else { 1 } return
0 return
}
void expr_print
{
int expr expr =:
int f f =:
# tcc_cc.c 2166
expr ? 0 == if
{
# tcc_cc.c 2167
# tcc_cc.c 2168
f ? "NULL" 0 fprintf () ;
# tcc_cc.c 2169
0 return
}
# tcc_cc.c 2171
32 expr ->s19_m_kind ? <s && { expr ->s19_m_kind ? 127 <s } if
{
# tcc_cc.c 2172
f ? "%c(" { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args fprintf () } ;
}
else
{
# tcc_cc.c 2174
f ? "%d(" { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args fprintf () } ;
}
# tcc_cc.c 2175
{
int i i 0 = ;
do
{
i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 2176
# tcc_cc.c 2177
i ? 0 >s if
{
# tcc_cc.c 2178
f ? ", " 0 fprintf () ;
}
# tcc_cc.c 2179
f ? expr ->s19_m_children i ? 4 * + ? expr_print () ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 2181
f ? ")" 0 fprintf () ;
0 return
}
int DK_IDENT
int DK_STRUCT
int DK_UNION
int DK_ENUM
int ST_NONE
int ST_STATIC
int ST_TYPEDEF
int ST_CONST
const s20_m_kind 0
const s20_m_name 4
const s20_m_type 8
const s20_m_storage_type 12
const s20_m_value 16
const s20_m_pos 20
const s20_m_su_nr 24
const s20_m_prev 28
int trace_decls
int cur_ident_decls
int cur_decls
void add_decl
{
int type type =:
int name name =:
int kind kind =:
# tcc_cc.c 2219
trace_decls ?1 char if
{
# tcc_cc.c 2220
# tcc_cc.c 2221
"add_decl '%s' %d" { int 2 __var_args __var_args name ? = ; __var_args 4 + kind ? = ; __var_args printf () } ;
# tcc_cc.c 2222
type ? 0 != if
{
# tcc_cc.c 2223
" Type %d" { int 1 __var_args __var_args type ->s18_m_kind ? = ; __var_args printf () } ;
}
# tcc_cc.c 2224
"\n" 0 printf () ;
}
int decl decl 32 malloc () = ;
# tcc_cc.c 2227
decl ->s20_m_kind kind ? = ;
# tcc_cc.c 2228
decl ->s20_m_name name ? copystr () = ;
# tcc_cc.c 2229
decl ->s20_m_type type ? = ;
# tcc_cc.c 2230
decl ->s20_m_storage_type ST_NONE ? = ;
# tcc_cc.c 2231
decl ->s20_m_value 0 = ;
# tcc_cc.c 2232
decl ->s20_m_pos 0 = ;
# tcc_cc.c 2233
decl ->s20_m_su_nr 0 = ;
# tcc_cc.c 2234
kind ? DK_IDENT ? == if
{
# tcc_cc.c 2235
# tcc_cc.c 2236
decl ->s20_m_prev cur_ident_decls ? = ;
# tcc_cc.c 2237
cur_ident_decls decl ? = ;
}
else
{
# tcc_cc.c 2240
# tcc_cc.c 2241
decl ->s20_m_prev cur_decls ? = ;
# tcc_cc.c 2242
cur_decls decl ? = ;
}
# tcc_cc.c 2244
decl ? return
0 return
}
void remove_decl
{
int decl decl =:
# tcc_cc.c 2249
{
int ref_decl ref_decl cur_decls = ;
do
{
ref_decl ? ? 0 != ! if { break }
# tcc_cc.c 2250
ref_decl ? ? decl ? == if
{
# tcc_cc.c 2251
# tcc_cc.c 2252
ref_decl ? ref_decl ? ->s20_m_prev ? = ;
# tcc_cc.c 2253
break
}
ref_decl ref_decl ? ->s20_m_prev = ;
}
}
0 return
}
void add_decl_clone
{
int decl decl =:
int decl_clone decl_clone decl ->s20_m_kind ? decl ->s20_m_name ? decl ->s20_m_type ? add_decl () = ;
# tcc_cc.c 2260
decl_clone ->s20_m_storage_type decl ->s20_m_storage_type ? = ;
0 return
}
void find_decl
{
int name name =:
int kind kind =:
# tcc_cc.c 2265
{
int decls decls kind ? DK_IDENT ? == if { cur_ident_decls ? } else { cur_decls ? } = ;
do
{
decls ? 0 != ! if { break }
# tcc_cc.c 2266
decls ->s20_m_name ? name ? strcmp () 0 == if
{
# tcc_cc.c 2267
decls ? return
}
decls decls ->s20_m_prev ? = ;
}
}
# tcc_cc.c 2268
0 return
0 return
}
void find_or_add_decl
{
int name name =:
int kind kind =:
int decl decl kind ? name ? find_decl () = ;
# tcc_cc.c 2274
decl ? 0 != if
{
# tcc_cc.c 2275
decl ? return
}
# tcc_cc.c 2276
kind ? name ? 0 add_decl () return
0 return
}
const s21_m_name 0
const s21_m_next 4
int cur_labels
void find_label
{
int name name =:
# tcc_cc.c 2292
{
int label label cur_labels ? = ;
do
{
label ? 0 != ! if { break }
# tcc_cc.c 2293
label ->s21_m_name ? name ? strcmp () 0 == if
{
# tcc_cc.c 2294
label ? return
}
label label ->s21_m_next ? = ;
}
}
# tcc_cc.c 2295
0 return
0 return
}
void find_or_add_label
{
int name name =:
int label label name ? find_label () = ;
# tcc_cc.c 2301
label ? 0 != if
{
# tcc_cc.c 2302
label ? return
}
# tcc_cc.c 2303
label 8 malloc () = ;
# tcc_cc.c 2304
label ->s21_m_name name ? copystr () = ;
# tcc_cc.c 2305
label ->s21_m_next cur_labels ? = ;
# tcc_cc.c 2306
cur_labels label ? = ;
# tcc_cc.c 2307
label ? return
0 return
}
void expr_eval
{
int expr expr =:
# tcc_cc.c 2314
expr ->s19_m_kind ? do
{
$ 48 == if
{
;
# tcc_cc.c 2316
expr ->s19_m_int_val ? return
# tcc_cc.c 2317
}
$ 43 == if
{
;
# tcc_cc.c 2317
expr ->s19_m_children 0 4 * + ? expr_eval () expr ->s19_m_children 1 4 * + ? expr_eval () + return
# tcc_cc.c 2318
}
$ 45 == if
{
;
# tcc_cc.c 2318
expr ->s19_m_children 0 4 * + ? expr_eval () expr ->s19_m_children 1 4 * + ? expr_eval () - return
# tcc_cc.c 2319
}
$ 47 == if
{
;
# tcc_cc.c 2319
expr ->s19_m_children 0 4 * + ? expr_eval () expr ->s19_m_children 1 4 * + ? expr_eval () /s return
# tcc_cc.c 2320
}
$ 124 == if
{
;
# tcc_cc.c 2320
expr ->s19_m_children 0 4 * + ? expr_eval () expr ->s19_m_children 1 4 * + ? expr_eval () | return
# tcc_cc.c 2321
}
$ 2005 == if
{
;
# tcc_cc.c 2321
0 expr ->s19_m_children 0 4 * + ? expr_eval () - return
# tcc_cc.c 2322
}
$ 860 == if
{
;
# tcc_cc.c 2322
expr ->s19_m_children 0 4 * + ? expr_eval () expr ->s19_m_children 1 4 * + ? expr_eval () << return
# tcc_cc.c 2323
}
$ 105 == if
{
;
# tcc_cc.c 2324
{
int expr_decl expr_decl DK_IDENT ? expr ->s19_m_str_val ? find_decl () = ;
# tcc_cc.c 2326
expr_decl ->s20_m_storage_type ? ST_CONST ? == && { expr_decl ->s20_m_value ->s19_m_type ? type_is_integer () } if
{
# tcc_cc.c 2328
expr_decl ->s20_m_value ->s19_m_int_val ? return
}
# tcc_cc.c 2329
"Error: storage type of %s = %d\n" { int 2 __var_args __var_args expr ->s19_m_str_val ? = ; __var_args 4 + expr_decl ->s20_m_storage_type ? = ; __var_args printf () } ;
# tcc_cc.c 2330
break
}
# tcc_cc.c 2332
break
}
; break
}
# tcc_cc.c 2333
"%s Error: expr_eval\n" { int 1 __var_args __var_args expr ? expr_pos () = ; __var_args printf () } ;
# tcc_cc.c 2334
1 exit () ;
# tcc_cc.c 2335
0 return
0 return
}
void expr_type_member
{
int nr nr =:
int expr expr =:
# tcc_cc.c 2342
expr ->s19_m_type ? 0 != && { nr ? expr ->s19_m_type ->s18_m_nr_members ? <s } if
{
# tcc_cc.c 2343
expr ->s19_m_type ->s18_m_members ? nr ? 4 * + ? return
}
# tcc_cc.c 2344
expr ->s19_m_kind ? 105 == if
{
# tcc_cc.c 2345
"%s: Error identifier '%s': " { int 2 __var_args __var_args expr ? expr_pos () = ; __var_args 4 + expr ->s19_m_str_val ? = ; __var_args printf () } ;
}
else
{
# tcc_cc.c 2347
"%s: Error expression: " { int 1 __var_args __var_args expr ? expr_pos () = ; __var_args printf () } ;
}
# tcc_cc.c 2348
expr ->s19_m_type ? 0 == if
{
# tcc_cc.c 2349
"Has no type\n" 0 printf () ;
}
else
{
# tcc_cc.c 2351
"Type has no member %d (%d)\n" { int 2 __var_args __var_args nr ? = ; __var_args 4 + expr ->s19_m_type ->s18_m_nr_members ? = ; __var_args printf () } ;
}
# tcc_cc.c 2352
0 return
0 return
}
void type_decl
{
int name name =:
int type type =:
# tcc_cc.c 2357
{
int i i 0 = ;
do
{
i ? type ->s18_m_nr_decls ? <s ! if { break }
# tcc_cc.c 2358
type ->s18_m_decls ? i ? 4 * + ? 0 != && { type ->s18_m_decls ? i ? 4 * + ->s20_m_name ? name ? strcmp () 0 == } if
{
# tcc_cc.c 2359
type ->s18_m_decls ? i ? 4 * + ? return
}
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 2360
stderr ? "%s: Error Type %p has no field %s\n" { int 3 __var_args __var_args token_it_pos () = ; __var_args 4 + type ? = ; __var_args 8 + name ? = ; __var_args fprintf () } ;
# tcc_cc.c 2361
0 return
0 return
}
void expr_type_decl
{
int name name =:
int expr expr =:
# tcc_cc.c 2366
expr ->s19_m_type ? 0 != if
{
# tcc_cc.c 2367
int decl decl expr ->s19_m_type ? name ? type_decl () = ;
# tcc_cc.c 2369
decl ? 0 != if
{
# tcc_cc.c 2370
decl ? return
}
}
# tcc_cc.c 2372
"%s: Error expression: " { int 1 __var_args __var_args expr ? expr_pos () = ; __var_args printf () } ;
# tcc_cc.c 2373
expr ->s19_m_type ? 0 == if
{
# tcc_cc.c 2374
"Has no type\n" 0 printf () ;
}
else
{
# tcc_cc.c 2376
# tcc_cc.c 2377
"Type %p has no field %s\n" { int 2 __var_args __var_args expr ->s19_m_type ? = ; __var_args 4 + name ? = ; __var_args printf () } ;
}
# tcc_cc.c 2379
0 return
0 return
}
void gen_start_struct_or_union ;
void gen_struct_or_union_member ;
void gen_variable_decl ;
void gen_function_start ;
void gen_function_end ;
void gen_stats_open ;
void gen_stats_close ;
void gen_stat_expr ;
void gen_expr ;
void gen_indent ;
int fcode
void next_token
{
# tcc_cc.c 2401
store_pos_for_expr () ;
# tcc_cc.c 2402
token_it token_it ? 0 token_it ->s11_m_next ? () = ;
0 return
}
void accept_term
{
int kind kind =:
# tcc_cc.c 2407
token_it ->s11_m_kind ? kind ? == if
{
# tcc_cc.c 2408
# tcc_cc.c 2409
next_token () ;
# tcc_cc.c 2410
1 return
}
# tcc_cc.c 2412
0 return
0 return
}
void parse_expr ;
void parse_type_specifier ;
void parse_unary_expr ;
int 2000 strbuf
void parse_primary_expr
{
# tcc_cc.c 2438
token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 2439
int decl decl DK_IDENT ? token_it ->s11_m_token ? find_decl () = ;
# tcc_cc.c 2441
decl ? 0 != && { decl ->s20_m_storage_type ? ST_TYPEDEF ? != } if
{
# tcc_cc.c 2442
# tcc_cc.c 2443
store_pos_for_expr () ;
int expr expr 105 0 new_expr () = ;
# tcc_cc.c 2445
expr ->s19_m_str_val token_it ->s11_m_token ? copystr () = ;
# tcc_cc.c 2446
expr ->s19_m_type decl ->s20_m_type ? = ;
# tcc_cc.c 2447
decl ->s20_m_type ? 0 == if
{
# tcc_cc.c 2448
"Identifier %s has no type\n" { int 1 __var_args __var_args expr ->s19_m_str_val ? = ; __var_args printf () } ;
}
# tcc_cc.c 2449
next_token () ;
# tcc_cc.c 2450
expr ? return
}
}
# tcc_cc.c 2453
token_it ->s11_m_kind ? 48 == if
{
# tcc_cc.c 2454
# tcc_cc.c 2455
store_pos_for_expr () ;
int expr expr token_it ? token_it_int_value () new_expr_int_value () = ;
int nr_L nr_L 0 = ;
# tcc_cc.c 2458
{
int s s token_it ->s11_m_token ? = ;
do
{
s ? ?1 char 0 != ! if { break }
# tcc_cc.c 2459
s ? ?1 char 76 == if
{
# tcc_cc.c 2460
nr_L $ ? 1 + = 1 - ;
}
s $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 2461
expr ->s19_m_type nr_L ? 1 >s if { base_type_U64 ? } else { base_type_U32 ? } = ;
# tcc_cc.c 2462
next_token () ;
# tcc_cc.c 2463
expr ? return
}
# tcc_cc.c 2465
token_it ->s11_m_kind ? 39 == if
{
# tcc_cc.c 2466
# tcc_cc.c 2467
store_pos_for_expr () ;
int expr expr token_it ->s11_m_token ? 0 + ?1 char new_expr_int_value () = ;
# tcc_cc.c 2469
expr ->s19_m_type base_type_S8 ? = ;
# tcc_cc.c 2470
next_token () ;
# tcc_cc.c 2471
expr ? return
}
# tcc_cc.c 2473
token_it ->s11_m_kind ? 34 == if
{
# tcc_cc.c 2474
# tcc_cc.c 2475
store_pos_for_expr () ;
int len len 0 = ;
# tcc_cc.c 2477
do
{
token_it ->s11_m_kind ? 34 == ! if { break }
# tcc_cc.c 2478
# tcc_cc.c 2479
len ? token_it ->s11_m_length ? + 8000 1 - <s if
{
# tcc_cc.c 2480
strbuf len ? + token_it ->s11_m_token ? token_it ->s11_m_length ? memcpy () ;
}
# tcc_cc.c 2481
len $ ? token_it ->s11_m_length ? + = ;
# tcc_cc.c 2482
next_token () ;
}
# tcc_cc.c 2484
len ? 8000 1 - >=s if
{
# tcc_cc.c 2485
# tcc_cc.c 2486
"MAX_CONST_STRLEN < %d\n" { int 1 __var_args __var_args len ? 1 + = ; __var_args printf () } ;
# tcc_cc.c 2487
1 exit () ;
}
# tcc_cc.c 2489
strbuf len ? + 0 =1 ;
int expr expr 34 0 new_expr () = ;
# tcc_cc.c 2491
expr ->s19_m_str_val len ? 1 + malloc () = ;
# tcc_cc.c 2492
expr ->s19_m_type type_char_ptr ? = ;
# tcc_cc.c 2493
expr ->s19_m_str_val ? strbuf len ? 1 + memcpy () ;
# tcc_cc.c 2494
expr ->s19_m_int_val len ? = ;
# tcc_cc.c 2495
expr ? return
}
# tcc_cc.c 2497
40 accept_term () if
{
# tcc_cc.c 2498
int type type 0 parse_type_specifier () = ;
# tcc_cc.c 2500
type ? 0 != if
{
# tcc_cc.c 2501
# tcc_cc.c 2502
opt_trace_parser ?1 char if
{
# tcc_cc.c 2503
"Cast expr\n" 0 printf () ;
}
# tcc_cc.c 2504
do
{
42 accept_term () ! if { break }
# tcc_cc.c 2505
int ptr_type ptr_type TYPE_KIND_POINTER ? 4 1 new_type () = ;
# tcc_cc.c 2507
ptr_type ->s18_m_members ? 0 4 * + type ? = ;
# tcc_cc.c 2508
type ptr_type ? = ;
}
# tcc_cc.c 2510
41 accept_term () ! if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int subj_expr subj_expr parse_unary_expr () = ;
# tcc_cc.c 2513
subj_expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2514
int expr expr 99 1 new_expr () = ;
# tcc_cc.c 2516
expr ->s19_m_children 0 4 * + subj_expr ? = ;
# tcc_cc.c 2517
expr ->s19_m_type type ? = ;
# tcc_cc.c 2518
expr ? return
}
int expr expr parse_expr () = ;
# tcc_cc.c 2521
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2523
41 accept_term () ! if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2525
expr ? return
}
# tcc_cc.c 2416
{
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
0 return
}
void parse_assignment_expr ;
void parse_postfix_expr
{
int expr expr parse_primary_expr () = ;
# tcc_cc.c 2547
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2549
{
do
{
# tcc_cc.c 2550
int subj_expr subj_expr expr ? = ;
# tcc_cc.c 2552
91 accept_term () if
{
# tcc_cc.c 2553
int index_expr index_expr parse_expr () = ;
# tcc_cc.c 2555
index_expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2557
93 accept_term () ! if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2559
expr 91 2 new_expr () = ;
# tcc_cc.c 2560
expr ->s19_m_children 0 4 * + subj_expr ? = ;
# tcc_cc.c 2561
expr ->s19_m_children 1 4 * + index_expr ? = ;
# tcc_cc.c 2562
expr ->s19_m_type subj_expr ? 0 expr_type_member () = ;
}
else
{
# tcc_cc.c 2564
40 accept_term () if
{
# tcc_cc.c 2565
int nr_children nr_children 1 = ;
int 20 children
# tcc_cc.c 2568
children 0 4 * + expr ? = ;
# tcc_cc.c 2569
token_it ->s11_m_kind ? 41 != if
{
# tcc_cc.c 2570
# tcc_cc.c 2571
do
{
# tcc_cc.c 2572
int child child parse_assignment_expr () = ;
# tcc_cc.c 2574
child ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2576
children nr_children $ ? 1 + = 1 - 4 * + child ? = ;
44 accept_term () ! if { break }
}
}
# tcc_cc.c 2579
41 accept_term () ! if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2581
expr 40 nr_children ? new_expr () = ;
# tcc_cc.c 2582
{
int i i 0 = ;
do
{
i ? nr_children ? <s ! if { break }
# tcc_cc.c 2583
expr ->s19_m_children i ? 4 * + children i ? 4 * + ? = ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 2584
expr ->s19_m_type subj_expr ? 0 expr_type_member () = ;
}
else
{
# tcc_cc.c 2586
46 accept_term () if
{
# tcc_cc.c 2587
# tcc_cc.c 2588
token_it ->s11_m_kind ? 105 != if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2590
expr 46 1 new_expr () = ;
# tcc_cc.c 2591
expr ->s19_m_str_val token_it ->s11_m_token ? copystr () = ;
# tcc_cc.c 2592
expr ->s19_m_children 0 4 * + subj_expr ? = ;
int mem_decl mem_decl subj_expr ? token_it ->s11_m_token ? expr_type_decl () = ;
# tcc_cc.c 2594
mem_decl ? 0 != if
{
# tcc_cc.c 2595
# tcc_cc.c 2596
expr ->s19_m_type mem_decl ->s20_m_type ? = ;
# tcc_cc.c 2597
expr ->s19_m_int_val mem_decl ->s20_m_su_nr ? = ;
}
# tcc_cc.c 2599
next_token () ;
}
else
{
# tcc_cc.c 2601
507 accept_term () if
{
# tcc_cc.c 2602
# tcc_cc.c 2603
token_it ->s11_m_kind ? 105 != if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2605
expr 507 1 new_expr () = ;
# tcc_cc.c 2606
expr ->s19_m_str_val token_it ->s11_m_token ? copystr () = ;
# tcc_cc.c 2607
expr ->s19_m_children 0 4 * + subj_expr ? = ;
# tcc_cc.c 2608
subj_expr ->s19_m_type ? 0 != && { subj_expr ->s19_m_type ->s18_m_kind ? TYPE_KIND_POINTER ? == } if
{
# tcc_cc.c 2609
int mem_decl mem_decl subj_expr ->s19_m_type ->s18_m_members ? 0 4 * + ? token_it ->s11_m_token ? type_decl () = ;
# tcc_cc.c 2611
mem_decl ? 0 != if
{
# tcc_cc.c 2612
# tcc_cc.c 2613
expr ->s19_m_type mem_decl ->s20_m_type ? = ;
# tcc_cc.c 2614
expr ->s19_m_int_val mem_decl ->s20_m_su_nr ? = ;
}
}
else
{
# tcc_cc.c 2618
"-> does not have pointer type\n" 0 printf () ;
}
# tcc_cc.c 2619
next_token () ;
}
else
{
# tcc_cc.c 2621
505 accept_term () if
{
# tcc_cc.c 2622
# tcc_cc.c 2623
expr 2000 1 new_expr () = ;
# tcc_cc.c 2624
expr ->s19_m_children 0 4 * + subj_expr ? = ;
# tcc_cc.c 2625
expr ->s19_m_type subj_expr ->s19_m_type ? = ;
}
else
{
# tcc_cc.c 2627
506 accept_term () if
{
# tcc_cc.c 2628
# tcc_cc.c 2629
expr 2001 1 new_expr () = ;
# tcc_cc.c 2630
expr ->s19_m_children 0 4 * + subj_expr ? = ;
# tcc_cc.c 2631
expr ->s19_m_type subj_expr ->s19_m_type ? = ;
}
else
{
# tcc_cc.c 2634
break
}
}
}
}
}
}
}
}
# tcc_cc.c 2636
expr ->s19_m_type ? 0 == if
{
# tcc_cc.c 2636
"parse_postfix_expr has no type\n" 0 printf () ;
}
# tcc_cc.c 2637
expr ? return
0 return
}
void parse_sizeof_type ;
void parse_unary_expr
{
# tcc_cc.c 2660
505 accept_term () if
{
# tcc_cc.c 2661
int expr expr parse_unary_expr () = ;
# tcc_cc.c 2663
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int pre_oper_expr pre_oper_expr 2002 1 new_expr () = ;
# tcc_cc.c 2666
pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2667
pre_oper_expr ->s19_m_type expr ->s19_m_type ? = ;
# tcc_cc.c 2668
pre_oper_expr ? return
}
# tcc_cc.c 2670
506 accept_term () if
{
# tcc_cc.c 2671
int expr expr parse_unary_expr () = ;
# tcc_cc.c 2673
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int pre_oper_expr pre_oper_expr 2003 1 new_expr () = ;
# tcc_cc.c 2676
pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2677
pre_oper_expr ->s19_m_type expr ->s19_m_type ? = ;
# tcc_cc.c 2678
pre_oper_expr ? return
}
# tcc_cc.c 2680
38 accept_term () if
{
# tcc_cc.c 2681
int expr expr parse_unary_expr () = ;
# tcc_cc.c 2683
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int pre_oper_expr pre_oper_expr 2007 1 new_expr () = ;
# tcc_cc.c 2686
pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2687
pre_oper_expr ->s19_m_type TYPE_KIND_POINTER ? 4 1 new_type () = ;
# tcc_cc.c 2688
pre_oper_expr ->s19_m_type ->s18_m_members ? 0 4 * + expr ->s19_m_type ? = ;
# tcc_cc.c 2689
pre_oper_expr ? return
}
# tcc_cc.c 2691
42 accept_term () if
{
# tcc_cc.c 2692
int expr expr parse_unary_expr () = ;
# tcc_cc.c 2694
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int pre_oper_expr pre_oper_expr 2006 1 new_expr () = ;
# tcc_cc.c 2697
pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2698
pre_oper_expr ->s19_m_type expr ? 0 expr_type_member () = ;
# tcc_cc.c 2699
pre_oper_expr ? return
}
# tcc_cc.c 2701
43 accept_term () if
{
# tcc_cc.c 2702
int expr expr parse_unary_expr () = ;
# tcc_cc.c 2704
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int pre_oper_expr pre_oper_expr 2004 1 new_expr () = ;
# tcc_cc.c 2707
pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2708
pre_oper_expr ->s19_m_type expr ->s19_m_type ? = ;
# tcc_cc.c 2709
pre_oper_expr ? return
}
# tcc_cc.c 2711
45 accept_term () if
{
# tcc_cc.c 2712
int expr expr parse_unary_expr () = ;
# tcc_cc.c 2714
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2716
expr ->s19_m_kind ? 48 == if
{
# tcc_cc.c 2717
int neg_num neg_num 0 expr ->s19_m_int_val ? - new_expr_int_value () = ;
# tcc_cc.c 2719
neg_num ->s19_m_type expr ->s19_m_type ? base_signed_type () = ;
# tcc_cc.c 2720
neg_num ? return
}
int pre_oper_expr pre_oper_expr 2005 1 new_expr () = ;
# tcc_cc.c 2723
pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2724
pre_oper_expr ->s19_m_type expr ->s19_m_type ? = ;
# tcc_cc.c 2725
pre_oper_expr ? return
}
# tcc_cc.c 2727
126 accept_term () if
{
# tcc_cc.c 2728
int expr expr parse_unary_expr () = ;
# tcc_cc.c 2730
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int pre_oper_expr pre_oper_expr 126 1 new_expr () = ;
# tcc_cc.c 2733
pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2734
pre_oper_expr ->s19_m_type expr ->s19_m_type ? = ;
# tcc_cc.c 2735
pre_oper_expr ? return
}
# tcc_cc.c 2737
33 accept_term () if
{
# tcc_cc.c 2738
int expr expr parse_unary_expr () = ;
# tcc_cc.c 2740
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int pre_oper_expr pre_oper_expr 33 1 new_expr () = ;
# tcc_cc.c 2743
pre_oper_expr ->s19_m_children 0 4 * + expr ? = ;
# tcc_cc.c 2744
pre_oper_expr ->s19_m_type base_type_bool ? = ;
# tcc_cc.c 2745
pre_oper_expr ? return
}
# tcc_cc.c 2747
1020 accept_term () if
{
# tcc_cc.c 2748
int type type 0 = ;
# tcc_cc.c 2750
40 accept_term () if
{
# tcc_cc.c 2751
# tcc_cc.c 2752
type parse_sizeof_type () = ;
# tcc_cc.c 2753
type ? 0 == if
{
# tcc_cc.c 2754
int sizeof_expr sizeof_expr parse_expr () = ;
# tcc_cc.c 2756
sizeof_expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2758
type sizeof_expr ->s19_m_type ? = ;
}
# tcc_cc.c 2760
41 accept_term () ! if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
}
else
{
# tcc_cc.c 2764
int sizeof_expr sizeof_expr parse_unary_expr () = ;
# tcc_cc.c 2766
sizeof_expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2768
type sizeof_expr ->s19_m_type ? = ;
}
int size size 0 = ;
# tcc_cc.c 2771
type ? 0 == if
{
# tcc_cc.c 2772
"%s Error: sizeof expression has not size\n" { int 1 __var_args __var_args token_it_pos () = ; __var_args printf () } ;
}
else
{
# tcc_cc.c 2774
size type ->s18_m_size ? = ;
}
# tcc_cc.c 2775
size ? new_expr_int_value () return
}
# tcc_cc.c 2778
parse_postfix_expr () return
0 return
}
void parse_sizeof_type
{
int type type 0 = ;
# tcc_cc.c 2797
1002 accept_term () if
{
# tcc_cc.c 2798
type base_type_S8 ? = ;
}
else
{
# tcc_cc.c 2799
1016 accept_term () if
{
# tcc_cc.c 2800
type base_type_S32 ? = ;
}
else
{
# tcc_cc.c 2801
1026 accept_term () if
{
# tcc_cc.c 2802
# tcc_cc.c 2803
1016 accept_term () if
{
# tcc_cc.c 2804
type base_type_U32 ? = ;
}
# tcc_cc.c 2805
type base_type_U32 ? = ;
}
else
{
# tcc_cc.c 2807
1007 accept_term () if
{
# tcc_cc.c 2808
type base_type_double ? = ;
}
else
{
# tcc_cc.c 2809
1027 accept_term () if
{
# tcc_cc.c 2810
# tcc_cc.c 2811
42 accept_term () if
{
# tcc_cc.c 2812
type type_char_ptr ? = ;
}
}
else
{
# tcc_cc.c 2814
1022 accept_term () if
{
# tcc_cc.c 2815
# tcc_cc.c 2816
token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 2817
int decl decl DK_STRUCT ? token_it ->s11_m_token ? find_decl () = ;
# tcc_cc.c 2819
decl ? 0 != && { decl ->s20_m_type ? 0 != } if
{
# tcc_cc.c 2820
# tcc_cc.c 2821
type decl ->s20_m_type ? = ;
# tcc_cc.c 2822
next_token () ;
}
}
}
else
{
# tcc_cc.c 2826
token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 2827
int decl decl DK_IDENT ? token_it ->s11_m_token ? find_decl () = ;
# tcc_cc.c 2829
decl ? 0 != && { decl ->s20_m_type ? 0 != } && { decl ->s20_m_storage_type ? ST_TYPEDEF ? == } if
{
# tcc_cc.c 2830
# tcc_cc.c 2831
type decl ->s20_m_type ? = ;
# tcc_cc.c 2832
next_token () ;
}
}
}
}
}
}
}
}
# tcc_cc.c 2835
type ? 0 == if
{
# tcc_cc.c 2836
0 return
}
# tcc_cc.c 2837
do
{
42 accept_term () ! if { break }
# tcc_cc.c 2838
type type_char_ptr ? = ;
}
# tcc_cc.c 2839
type ? return
0 return
}
void expr_dioper_set_type
{
int expr expr =:
int type_lhs type_lhs expr ->s19_m_children 0 4 * + ->s19_m_type ? = ;
int type_rhs type_rhs expr ->s19_m_children 1 4 * + ->s19_m_type ? = ;
# tcc_cc.c 2853
type_lhs ? type_is_integer () && { type_rhs ? type_is_integer () } if
{
# tcc_cc.c 2854
int size size type_lhs ->s18_m_size ? type_rhs ->s18_m_size ? >s if { type_lhs ->s18_m_size ? } else { type_rhs ->s18_m_size ? } = ;
int signed_int signed_int type_lhs ->s18_m_base_type ? type_lhs ->s18_m_base_type ? | 2 & 2 == =1 ;
# tcc_cc.c 2857
size ? 8 == if
{
# tcc_cc.c 2858
expr ->s19_m_type signed_int ?1 char if { base_type_S64 ? } else { base_type_U64 ? } = ;
}
else
{
# tcc_cc.c 2859
size ? 4 == if
{
# tcc_cc.c 2860
expr ->s19_m_type signed_int ?1 char if { base_type_S32 ? } else { base_type_U32 ? } = ;
}
else
{
# tcc_cc.c 2861
size ? 2 == if
{
# tcc_cc.c 2862
expr ->s19_m_type signed_int ?1 char if { base_type_S16 ? } else { base_type_U16 ? } = ;
}
else
{
# tcc_cc.c 2864
expr ->s19_m_type signed_int ?1 char if { base_type_S8 ? } else { base_type_U8 ? } = ;
}
}
}
}
else
{
# tcc_cc.c 2866
type_lhs ? type_is_pointer () && { type_rhs ? type_is_integer () } if
{
# tcc_cc.c 2867
expr ->s19_m_type type_lhs ? = ;
}
else
{
# tcc_cc.c 2868
type_lhs ? type_is_integer () && { type_rhs ? type_is_pointer () } if
{
# tcc_cc.c 2869
expr ->s19_m_type type_rhs ? = ;
}
else
{
# tcc_cc.c 2870
expr ->s19_m_kind ? 45 == && { type_lhs ? type_is_pointer () } && { type_rhs ? type_is_pointer () } if
{
# tcc_cc.c 2871
expr ->s19_m_type base_type_S32 ? = ;
}
}
}
}
# tcc_cc.c 2872
expr ->s19_m_type ? 0 == if
{
# tcc_cc.c 2873
# tcc_cc.c 2874
"%s: Error dioper expression: Has no type." { int 1 __var_args __var_args expr ? expr_pos () = ; __var_args printf () } ;
# tcc_cc.c 2875
type_lhs ? type_is_integer () ! if
{
# tcc_cc.c 2875
" LHS not an integer %d" { int 1 __var_args __var_args type_lhs ? 0 == if { 4294967295 } else { type_lhs ->s18_m_kind ? } = ; __var_args printf () } ;
}
# tcc_cc.c 2876
type_rhs ? type_is_integer () ! if
{
# tcc_cc.c 2876
" RHS not an integer %d" { int 1 __var_args __var_args type_rhs ? 0 == if { 4294967295 } else { type_rhs ->s18_m_kind ? } = ; __var_args printf () } ;
}
# tcc_cc.c 2877
"\n" 0 printf () ;
}
0 return
}
void parse_expr1
{
int expr expr parse_unary_expr () = ;
# tcc_cc.c 2888
{
do
{
# tcc_cc.c 2889
int kind kind token_it ->s11_m_kind ? = ;
# tcc_cc.c 2891
42 accept_term () || { 47 accept_term () } || { 37 accept_term () } if
{
# tcc_cc.c 2892
int lhs lhs expr ? = ;
int rhs rhs parse_unary_expr () = ;
# tcc_cc.c 2895
rhs ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2897
expr kind ? 2 new_expr () = ;
# tcc_cc.c 2898
expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 2899
expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 2900
expr ? expr_dioper_set_type () ;
}
else
{
# tcc_cc.c 2903
break
}
}
}
# tcc_cc.c 2906
expr ? 0 != && { expr ->s19_m_type ? 0 == } if
{
# tcc_cc.c 2906
"parse_expr1 has no type\n" 0 printf () ;
}
# tcc_cc.c 2907
expr ? return
0 return
}
void parse_expr2
{
int expr expr parse_expr1 () = ;
# tcc_cc.c 2917
{
do
{
# tcc_cc.c 2918
int kind kind token_it ->s11_m_kind ? = ;
# tcc_cc.c 2920
43 accept_term () || { 45 accept_term () } if
{
# tcc_cc.c 2921
int lhs lhs expr ? = ;
int rhs rhs parse_expr1 () = ;
# tcc_cc.c 2924
rhs ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2926
expr kind ? 2 new_expr () = ;
# tcc_cc.c 2927
expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 2928
expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 2929
expr ? expr_dioper_set_type () ;
}
else
{
# tcc_cc.c 2932
break
}
}
}
# tcc_cc.c 2935
expr ? return
0 return
}
void parse_expr3
{
int expr expr parse_expr2 () = ;
# tcc_cc.c 2945
{
do
{
# tcc_cc.c 2946
int kind kind token_it ->s11_m_kind ? = ;
# tcc_cc.c 2948
800 60 + accept_term () || { 800 62 + accept_term () } if
{
# tcc_cc.c 2949
int lhs lhs expr ? = ;
int rhs rhs parse_expr2 () = ;
# tcc_cc.c 2952
rhs ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2954
expr kind ? 2 new_expr () = ;
# tcc_cc.c 2955
expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 2956
expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 2957
expr ->s19_m_type expr ->s19_m_children 0 4 * + ->s19_m_type ? = ;
}
else
{
# tcc_cc.c 2960
break
}
}
}
# tcc_cc.c 2963
expr ? return
0 return
}
void parse_expr4
{
int expr expr parse_expr3 () = ;
# tcc_cc.c 2973
{
do
{
# tcc_cc.c 2974
int kind kind token_it ->s11_m_kind ? = ;
# tcc_cc.c 2976
501 accept_term () || { 502 accept_term () } || { 503 accept_term () } || { 504 accept_term () } || { 60 accept_term () } || { 62 accept_term () } if
{
# tcc_cc.c 2979
int lhs lhs expr ? = ;
int rhs rhs parse_expr3 () = ;
# tcc_cc.c 2982
rhs ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 2984
expr kind ? 2 new_expr () = ;
# tcc_cc.c 2985
expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 2986
expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 2987
expr ->s19_m_type base_type_bool ? = ;
}
else
{
# tcc_cc.c 2990
break
}
}
}
# tcc_cc.c 2993
expr ? return
0 return
}
void parse_expr5
{
int expr expr parse_expr4 () = ;
# tcc_cc.c 3003
do
{
94 accept_term () ! if { break }
# tcc_cc.c 3004
int lhs lhs expr ? = ;
int rhs rhs parse_expr4 () = ;
# tcc_cc.c 3007
rhs ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3009
expr 94 2 new_expr () = ;
# tcc_cc.c 3010
expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3011
expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3012
expr ? expr_dioper_set_type () ;
}
# tcc_cc.c 3015
expr ? return
0 return
}
void parse_expr6
{
int expr expr parse_expr5 () = ;
# tcc_cc.c 3025
do
{
38 accept_term () ! if { break }
# tcc_cc.c 3026
int lhs lhs expr ? = ;
int rhs rhs parse_expr5 () = ;
# tcc_cc.c 3029
rhs ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3031
expr 38 2 new_expr () = ;
# tcc_cc.c 3032
expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3033
expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3034
expr ? expr_dioper_set_type () ;
}
# tcc_cc.c 3037
expr ? return
0 return
}
void parse_expr7
{
int expr expr parse_expr6 () = ;
# tcc_cc.c 3047
do
{
124 accept_term () ! if { break }
# tcc_cc.c 3048
int lhs lhs expr ? = ;
int rhs rhs parse_expr6 () = ;
# tcc_cc.c 3051
rhs ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3053
expr 124 2 new_expr () = ;
# tcc_cc.c 3054
expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3055
expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3056
expr ? expr_dioper_set_type () ;
}
# tcc_cc.c 3059
expr ? return
0 return
}
void parse_expr8
{
int expr expr parse_expr7 () = ;
# tcc_cc.c 3069
do
{
800 38 + accept_term () ! if { break }
# tcc_cc.c 3070
int lhs lhs expr ? = ;
int rhs rhs parse_expr7 () = ;
# tcc_cc.c 3073
rhs ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3075
expr 800 38 + 2 new_expr () = ;
# tcc_cc.c 3076
expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3077
expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3078
expr ->s19_m_type base_type_bool ? = ;
}
# tcc_cc.c 3081
expr ? return
0 return
}
void parse_expr9
{
int expr expr parse_expr8 () = ;
# tcc_cc.c 3091
do
{
800 124 + accept_term () ! if { break }
# tcc_cc.c 3092
int lhs lhs expr ? = ;
int rhs rhs parse_expr8 () = ;
# tcc_cc.c 3095
rhs ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3097
expr 800 124 + 2 new_expr () = ;
# tcc_cc.c 3098
expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3099
expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3100
expr ->s19_m_type base_type_bool ? = ;
}
# tcc_cc.c 3103
expr ? return
0 return
}
void parse_conditional_expr
{
int expr expr parse_expr9 () = ;
# tcc_cc.c 3116
63 accept_term () if
{
# tcc_cc.c 3117
int cond_expr cond_expr expr ? = ;
int then_expr then_expr parse_expr9 () = ;
# tcc_cc.c 3120
then_expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3122
58 accept_term () ! if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int else_expr else_expr parse_conditional_expr () = ;
# tcc_cc.c 3125
else_expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3127
expr 63 3 new_expr () = ;
# tcc_cc.c 3128
expr ->s19_m_children 0 4 * + cond_expr ? = ;
# tcc_cc.c 3129
expr ->s19_m_children 1 4 * + then_expr ? = ;
# tcc_cc.c 3130
expr ->s19_m_children 2 4 * + else_expr ? = ;
# tcc_cc.c 3131
expr ->s19_m_type then_expr ->s19_m_type ? = ;
}
# tcc_cc.c 3134
expr ? return
0 return
}
void parse_assignment_expr
{
int expr expr parse_conditional_expr () = ;
# tcc_cc.c 3149
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3151
{
do
{
# tcc_cc.c 3152
# tcc_cc.c 3153
token_it ->s11_m_kind ? 61 == || { token_it ->s11_m_kind ? 600 >=s && { token_it ->s11_m_kind ? 600 127 + <s } } if
{
# tcc_cc.c 3154
int kind kind token_it ->s11_m_kind ? = ;
# tcc_cc.c 3156
next_token () ;
int lhs lhs expr ? = ;
int rhs rhs parse_assignment_expr () = ;
# tcc_cc.c 3159
rhs ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3161
expr kind ? 2 new_expr () = ;
# tcc_cc.c 3162
expr ->s19_m_children 0 4 * + lhs ? = ;
# tcc_cc.c 3163
expr ->s19_m_children 1 4 * + rhs ? = ;
# tcc_cc.c 3164
expr ->s19_m_type lhs ->s19_m_type ? = ;
}
else
{
# tcc_cc.c 3168
break
}
}
}
# tcc_cc.c 3171
expr ? return
0 return
}
void parse_expr
{
int expr expr parse_assignment_expr () = ;
# tcc_cc.c 3181
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3183
44 accept_term () if
{
# tcc_cc.c 3184
int nr_children nr_children 1 = ;
int 20 children
# tcc_cc.c 3187
children 0 4 * + expr ? = ;
# tcc_cc.c 3188
do
{
# tcc_cc.c 3189
int child child parse_assignment_expr () = ;
# tcc_cc.c 3191
child ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3193
children nr_children $ ? 1 + = 1 - 4 * + child ? = ;
44 accept_term () ! if { break }
}
# tcc_cc.c 3195
expr 44 nr_children ? new_expr () = ;
# tcc_cc.c 3196
{
int i i 0 = ;
do
{
i ? nr_children ? <s ! if { break }
# tcc_cc.c 3197
expr ->s19_m_children i ? 4 * + children i ? 4 * + ? = ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 3198
expr ->s19_m_type expr ->s19_m_children nr_children ? 1 - 4 * + ->s19_m_type ? = ;
}
# tcc_cc.c 3200
expr ? return
0 return
}
void parse_statements ;
void parse_initializer ;
const s22_m_is_struct 0
const s22_m_pos 4
const s22_m_size 8
int cur_struct_or_union
int save_decl_depth
int inside_function
int inside_argument_list
void round_up_word
{
int size size =:
# tcc_cc.c 3220
size ? 3 + 3 ~ & return
0 return
}
void array_element_size
{
int type type =:
# tcc_cc.c 3224
type ->s18_m_size ? 1 == && { type ->s18_m_base_type ? BT_S8 ? == || { type ->s18_m_base_type ? BT_U8 ? == } } if { 1 } else { type ->s18_m_size ? round_up_word () } return
0 return
}
void parse_array_indexes
{
int arr_type arr_type =:
int type type =:
int expr expr parse_expr () = ;
# tcc_cc.c 3236
expr ? 0 == if
{
# tcc_cc.c 3237
0 return
}
int nr_elems nr_elems expr ? expr_eval () = ;
# tcc_cc.c 3239
93 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3241
91 accept_term () if
{
# tcc_cc.c 3242
int result_type result_type 0 = ;
# tcc_cc.c 3244
type ? result_type parse_array_indexes () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3246
type result_type ? = ;
}
# tcc_cc.c 3248
arr_type ? TYPE_KIND_ARRAY ? nr_elems ? type ->s18_m_size ? * 1 new_type () = ;
# tcc_cc.c 3249
arr_type ? ->s18_m_members ? 0 4 * + type ? = ;
# tcc_cc.c 3250
arr_type ? ->s18_m_nr_elems nr_elems ? = ;
# tcc_cc.c 3251
arr_type ? ->s18_m_size nr_elems ? type ? array_element_size () * = ;
# tcc_cc.c 3252
1 return
0 return
}
void parse_declaration
{
int is_param is_param =:
int storage_type storage_type ST_NONE ? = ;
# tcc_cc.c 3280
{
do
{
# tcc_cc.c 3281
# tcc_cc.c 3282
1024 accept_term () if
{
# tcc_cc.c 3283
# tcc_cc.c 3284
storage_type ST_TYPEDEF ? = ;
# tcc_cc.c 3285
inside_function ?1 char if
{
# tcc_cc.c 3286
stderr ? "%s: typedef inside function\n" { int 1 __var_args __var_args token_it_pos () = ; __var_args fprintf () } ;
}
}
else
{
# tcc_cc.c 3288
1010 accept_term () if
{
# tcc_cc.c 3289
}
else
{
# tcc_cc.c 3291
1015 accept_term () if
{
# tcc_cc.c 3292
}
else
{
# tcc_cc.c 3294
1021 accept_term () if
{
# tcc_cc.c 3295
# tcc_cc.c 3296
inside_function ?1 char if
{
# tcc_cc.c 3297
storage_type ST_STATIC ? = ;
}
}
else
{
# tcc_cc.c 3300
break
}
}
}
}
}
}
int type_specifier type_specifier storage_type parse_type_specifier () = ;
# tcc_cc.c 3303
type_specifier ? 0 == if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3305
59 accept_term () if
{
# tcc_cc.c 3306
# tcc_cc.c 3307
cur_struct_or_union ? 0 != && { type_specifier ->s18_m_kind ? TYPE_KIND_STRUCT ? == || { type_specifier ->s18_m_kind ? TYPE_KIND_UNION ? == } } if
{
# tcc_cc.c 3309
# tcc_cc.c 3310
{
int i i 0 = ;
do
{
i ? type_specifier ->s18_m_nr_decls ? <s ! if { break }
# tcc_cc.c 3311
int decl decl type_specifier ->s18_m_decls ? i ? 4 * + ? = ;
int decl_clone decl_clone decl ->s20_m_kind ? decl ->s20_m_name ? decl ->s20_m_type ? add_decl () = ;
# tcc_cc.c 3314
decl_clone ->s20_m_storage_type decl ->s20_m_storage_type ? = ;
# tcc_cc.c 3315
decl_clone ->s20_m_pos cur_struct_or_union ->s22_m_pos ? decl ->s20_m_pos ? + = ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 3317
cur_struct_or_union ->s22_m_is_struct ?1 char if
{
# tcc_cc.c 3318
# tcc_cc.c 3319
cur_struct_or_union ->s22_m_pos $ ? type_specifier ->s18_m_size ? round_up_word () + = ;
# tcc_cc.c 3320
cur_struct_or_union ->s22_m_size cur_struct_or_union ->s22_m_pos ? = ;
}
else
{
# tcc_cc.c 3323
int size size type_specifier ->s18_m_size ? round_up_word () = ;
# tcc_cc.c 3325
size ? cur_struct_or_union ->s22_m_size ? >s if
{
# tcc_cc.c 3326
cur_struct_or_union ->s22_m_size size ? = ;
}
}
}
# tcc_cc.c 3329
1 return
}
# tcc_cc.c 3331
do
{
# tcc_cc.c 3332
int type type type_specifier ? = ;
# tcc_cc.c 3334
do
{
42 accept_term () ! if { break }
# tcc_cc.c 3335
int pointer_type pointer_type TYPE_KIND_POINTER ? 4 1 new_type () = ;
# tcc_cc.c 3337
pointer_type ->s18_m_members ? 0 4 * + type ? = ;
# tcc_cc.c 3338
type pointer_type ? = ;
}
int prev_decl prev_decl 0 = ;
int decl decl 0 = ;
int as_pointer as_pointer 0 =1 ;
# tcc_cc.c 3343
token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 3344
# tcc_cc.c 3345
inside_function ?1 char ! && { inside_argument_list ?1 char ! } && { cur_struct_or_union ? 0 == } if
{
# tcc_cc.c 3346
prev_decl DK_IDENT ? token_it ->s11_m_token ? find_decl () = ;
}
# tcc_cc.c 3347
decl DK_IDENT ? token_it ->s11_m_token ? 0 add_decl () = ;
# tcc_cc.c 3348
next_token () ;
}
else
{
# tcc_cc.c 3350
40 accept_term () if
{
# tcc_cc.c 3351
# tcc_cc.c 3352
42 accept_term () if
{
# tcc_cc.c 3353
# tcc_cc.c 3354
token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 3355
# tcc_cc.c 3356
as_pointer 1 =1 ;
# tcc_cc.c 3357
inside_function ?1 char ! && { inside_argument_list ?1 char ! } && { cur_struct_or_union ? 0 == } if
{
# tcc_cc.c 3358
prev_decl DK_IDENT ? token_it ->s11_m_token ? find_decl () = ;
}
# tcc_cc.c 3359
decl DK_IDENT ? token_it ->s11_m_token ? 0 add_decl () = ;
# tcc_cc.c 3360
next_token () ;
}
}
# tcc_cc.c 3364
41 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
}
}
# tcc_cc.c 3367
decl ? 0 != if
{
# tcc_cc.c 3368
# tcc_cc.c 3369
{
do
{
# tcc_cc.c 3370
int subj_type subj_type type ? = ;
# tcc_cc.c 3372
40 accept_term () if
{
# tcc_cc.c 3373
# tcc_cc.c 3374
inside_argument_list 1 =1 ;
# tcc_cc.c 3375
cur_labels 0 = ;
int save_ident_decls save_ident_decls cur_ident_decls ? = ;
int var_params var_params 0 =1 ;
# tcc_cc.c 3378
do
{
# tcc_cc.c 3379
# tcc_cc.c 3380
509 accept_term () if
{
# tcc_cc.c 3381
# tcc_cc.c 3382
var_params 1 =1 ;
# tcc_cc.c 3383
break
}
# tcc_cc.c 3385
1 parse_declaration () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3386
44 accept_term () ! if { break }
}
# tcc_cc.c 3388
41 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3389
# tcc_cc.c 3390
inside_argument_list 0 =1 ;
# tcc_cc.c 3391
type TYPE_KIND_FUNCTION ? 4 1 new_type () = ;
# tcc_cc.c 3392
type ->s18_m_members ? 0 4 * + subj_type ? = ;
int nr_parameters nr_parameters 0 = ;
# tcc_cc.c 3394
{
int decl1 decl1 cur_ident_decls ? = ;
do
{
decl1 ? save_ident_decls ? != ! if { break }
# tcc_cc.c 3395
nr_parameters $ ? 1 + = 1 - ;
decl1 decl1 ->s20_m_prev ? = ;
}
}
int 20 parameters
int i i nr_parameters ? = ;
# tcc_cc.c 3398
var_params ?1 char if
{
# tcc_cc.c 3399
# tcc_cc.c 3400
nr_parameters $ ? 1 + = 1 - ;
# tcc_cc.c 3401
parameters i ? 4 * + 0 = ;
}
# tcc_cc.c 3403
{
int decl1 decl1 cur_ident_decls ? = ;
do
{
decl1 ? save_ident_decls ? != ! if { break }
# tcc_cc.c 3404
parameters i $ ? 1 - = 4 * + decl1 ? = ;
decl1 decl1 ->s20_m_prev ? = ;
}
}
# tcc_cc.c 3405
type ? nr_parameters ? parameters type_set_decls () ;
# tcc_cc.c 3406
decl ->s20_m_type type ? = ;
# tcc_cc.c 3407
123 accept_term () if
{
# tcc_cc.c 3408
# tcc_cc.c 3409
inside_function 1 =1 ;
# tcc_cc.c 3410
decl ? gen_function_start () ;
# tcc_cc.c 3411
0 parse_statements () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3413
125 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3415
cur_ident_decls save_ident_decls ? = ;
# tcc_cc.c 3416
gen_function_end () ;
# tcc_cc.c 3417
inside_function 0 =1 ;
# tcc_cc.c 3418
1 return
}
# tcc_cc.c 3420
inside_function ?1 char ! && { cur_struct_or_union ? 0 == } if
{
# tcc_cc.c 3421
fcode ? "void %s ;\n" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
}
# tcc_cc.c 3422
cur_ident_decls save_ident_decls ? = ;
# tcc_cc.c 3423
break
}
else
{
# tcc_cc.c 3425
91 accept_term () if
{
# tcc_cc.c 3426
# tcc_cc.c 3427
93 accept_term () if
{
# tcc_cc.c 3428
int ptr_type ptr_type TYPE_KIND_POINTER ? 4 1 new_type () = ;
# tcc_cc.c 3430
91 accept_term () if
{
# tcc_cc.c 3431
int result_type result_type 0 = ;
# tcc_cc.c 3433
type ? result_type parse_array_indexes () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3435
type result_type ? = ;
}
# tcc_cc.c 3437
ptr_type ->s18_m_members ? 0 4 * + type ? = ;
# tcc_cc.c 3438
type ptr_type ? = ;
}
else
{
# tcc_cc.c 3441
int result_type result_type 0 = ;
# tcc_cc.c 3443
type ? result_type parse_array_indexes () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3445
type result_type ? = ;
}
}
else
{
# tcc_cc.c 3449
break
}
}
}
}
# tcc_cc.c 3451
as_pointer ?1 char if
{
# tcc_cc.c 3452
int ptr_type ptr_type TYPE_KIND_POINTER ? 4 1 new_type () = ;
# tcc_cc.c 3454
ptr_type ->s18_m_members ? 0 4 * + type ? = ;
# tcc_cc.c 3455
type ptr_type ? = ;
}
# tcc_cc.c 3457
prev_decl ? 0 != && { type ->s18_m_kind ? TYPE_KIND_FUNCTION ? != } if
{
# tcc_cc.c 3458
# tcc_cc.c 3459
stderr ? "%s: Warning: declaration of %s repeated\n" { int 2 __var_args __var_args token_it_pos () = ; __var_args 4 + decl ->s20_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 3460
decl ? remove_decl () ;
}
# tcc_cc.c 3462
decl ->s20_m_type type ? = ;
# tcc_cc.c 3463
decl ->s20_m_storage_type storage_type ? = ;
# tcc_cc.c 3464
cur_struct_or_union ? 0 != if
{
# tcc_cc.c 3465
# tcc_cc.c 3466
decl ->s20_m_pos cur_struct_or_union ->s22_m_pos ? = ;
# tcc_cc.c 3467
cur_struct_or_union ->s22_m_is_struct ?1 char if
{
# tcc_cc.c 3468
# tcc_cc.c 3469
cur_struct_or_union ->s22_m_pos $ ? type ->s18_m_size ? round_up_word () + = ;
# tcc_cc.c 3470
cur_struct_or_union ->s22_m_size cur_struct_or_union ->s22_m_pos ? = ;
}
else
{
# tcc_cc.c 3473
int size size type ->s18_m_size ? round_up_word () = ;
# tcc_cc.c 3475
size ? cur_struct_or_union ->s22_m_size ? >s if
{
# tcc_cc.c 3476
cur_struct_or_union ->s22_m_size size ? = ;
}
}
}
# tcc_cc.c 3479
storage_type ? ST_TYPEDEF ? == && { type ->s18_m_typedef_decl ? 0 == } if
{
# tcc_cc.c 3480
# tcc_cc.c 3481
type ->s18_m_typedef_decl decl ? = ;
# tcc_cc.c 3482
type ->s18_m_kind ? TYPE_KIND_STRUCT ? == && { decl ->s20_m_name ? "Stab_Sym" strcmp () 0 == || { decl ->s20_m_name ? "Elf32_" 6 strncmp () 0 == } || { decl ->s20_m_name ? "ArchiveHeader" strcmp () 0 == } || { decl ->s20_m_name ? "ArHdr" strcmp () 0 == } } if
{
# tcc_cc.c 3487
int pos pos 0 = ;
# tcc_cc.c 3489
{
int i i 0 = ;
do
{
i ? type ->s18_m_nr_decls ? <s ! if { break }
# tcc_cc.c 3490
# tcc_cc.c 3491
type ->s18_m_decls ? i ? 4 * + ->s20_m_pos pos ? = ;
# tcc_cc.c 3492
pos $ ? type ->s18_m_decls ? i ? 4 * + ->s20_m_type ->s18_m_size ? + = ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 3494
pos ? type ->s18_m_size ? <s if
{
# tcc_cc.c 3495
# tcc_cc.c 3496
"%s Info: %s is 'packed' with size reduced from %d to %d\n" { int 4 __var_args __var_args token_it_pos () = ; __var_args 4 + decl ->s20_m_name ? = ; __var_args 8 + type ->s18_m_size ? = ; __var_args 12 + pos ? = ; __var_args printf () } ;
# tcc_cc.c 3497
type ->s18_m_size pos ? = ;
# tcc_cc.c 3498
gen_start_struct_or_union () ;
# tcc_cc.c 3499
{
int i i 0 = ;
do
{
i ? type ->s18_m_nr_decls ? <s ! if { break }
# tcc_cc.c 3500
type ->s18_m_decls ? i ? 4 * + ? gen_struct_or_union_member () ;
i $ ? 1 + = 1 - ;
}
}
}
}
}
# tcc_cc.c 3504
61 accept_term () if
{
# tcc_cc.c 3505
# tcc_cc.c 3506
decl ->s20_m_value parse_initializer () = ;
# tcc_cc.c 3507
as_pointer ?1 char ! && { decl ->s20_m_type ->s18_m_kind ? TYPE_KIND_POINTER ? == } && { decl ->s20_m_value ? 0 != } && { decl ->s20_m_value ->s19_m_kind ? 108 == } if
{
# tcc_cc.c 3508
int nr_elems nr_elems decl ->s20_m_value ->s19_m_nr_children ? = ;
# tcc_cc.c 3511
decl ->s20_m_type ->s18_m_kind TYPE_KIND_ARRAY ? = ;
# tcc_cc.c 3512
decl ->s20_m_type ->s18_m_size nr_elems ? decl ->s20_m_type ->s18_m_members ? 0 4 * + ? array_element_size () * = ;
# tcc_cc.c 3513
decl ->s20_m_type ->s18_m_nr_elems nr_elems ? = ;
}
}
# tcc_cc.c 3516
is_param ?1 char ! && { cur_struct_or_union ? 0 == } && { decl ->s20_m_storage_type ? ST_TYPEDEF ? != } && { type ->s18_m_kind ? TYPE_KIND_FUNCTION ? != } if
{
# tcc_cc.c 3517
decl ? gen_variable_decl () ;
}
}
is_param ?1 char ! && { 44 accept_term () } ! if { break }
}
# tcc_cc.c 3521
is_param ?1 char || { 59 accept_term () } return
0 return
}
void parse_struct_or_union_specifier ;
void parse_enum_specifier ;
void parse_type_specifier
{
int ref_storage_type ref_storage_type =:
# tcc_cc.c 3548
1003 accept_term () if
{
# tcc_cc.c 3549
# tcc_cc.c 3550
ref_storage_type ? 0 != if
{
# tcc_cc.c 3550
ref_storage_type ? ST_CONST ? = ;
}
}
# tcc_cc.c 3552
1002 accept_term () if
{
# tcc_cc.c 3553
# tcc_cc.c 3554
1003 accept_term () if
{
# tcc_cc.c 3555
# tcc_cc.c 3556
ref_storage_type ? 0 != if
{
# tcc_cc.c 3556
ref_storage_type ? ST_CONST ? = ;
}
}
# tcc_cc.c 3558
base_type_S8 ? return
}
# tcc_cc.c 3560
1026 accept_term () if
{
# tcc_cc.c 3561
# tcc_cc.c 3562
1002 accept_term () if
{
# tcc_cc.c 3563
# tcc_cc.c 3564
base_type_U8 ? return
}
# tcc_cc.c 3566
1019 accept_term () if
{
# tcc_cc.c 3567
# tcc_cc.c 3568
base_type_U16 ? return
}
# tcc_cc.c 3570
1017 accept_term () if
{
# tcc_cc.c 3571
# tcc_cc.c 3572
1017 accept_term () if
{
# tcc_cc.c 3573
# tcc_cc.c 3574
base_type_U64 ? return
}
# tcc_cc.c 3576
base_type_U32 ? return
}
# tcc_cc.c 3578
1016 accept_term () if
{
# tcc_cc.c 3579
# tcc_cc.c 3580
base_type_U32 ? return
}
# tcc_cc.c 3582
base_type_U32 ? return
}
# tcc_cc.c 3584
1019 accept_term () if
{
# tcc_cc.c 3585
# tcc_cc.c 3586
base_type_U16 ? return
}
# tcc_cc.c 3588
1016 accept_term () if
{
# tcc_cc.c 3589
# tcc_cc.c 3590
base_type_S32 ? return
}
# tcc_cc.c 3592
1017 accept_term () if
{
# tcc_cc.c 3593
# tcc_cc.c 3594
1007 accept_term () if
{
# tcc_cc.c 3595
# tcc_cc.c 3596
base_type_double ? return
}
# tcc_cc.c 3598
1017 accept_term () if
{
# tcc_cc.c 3599
# tcc_cc.c 3600
base_type_S64 ? return
}
# tcc_cc.c 3602
base_type_S32 ? return
}
# tcc_cc.c 3604
1011 accept_term () if
{
# tcc_cc.c 3605
# tcc_cc.c 3606
base_type_float ? return
}
# tcc_cc.c 3608
1007 accept_term () if
{
# tcc_cc.c 3609
# tcc_cc.c 3610
base_type_double ? return
}
# tcc_cc.c 3612
1027 accept_term () if
{
# tcc_cc.c 3613
# tcc_cc.c 3614
base_type_void ? return
}
# tcc_cc.c 3616
1022 accept_term () if
{
# tcc_cc.c 3617
# tcc_cc.c 3618
DK_STRUCT ? parse_struct_or_union_specifier () return
}
# tcc_cc.c 3620
1025 accept_term () if
{
# tcc_cc.c 3621
# tcc_cc.c 3622
DK_UNION ? parse_struct_or_union_specifier () return
}
# tcc_cc.c 3624
1009 accept_term () if
{
# tcc_cc.c 3625
# tcc_cc.c 3626
parse_enum_specifier () return
}
# tcc_cc.c 3628
token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 3629
int decl decl DK_IDENT ? token_it ->s11_m_token ? find_decl () = ;
# tcc_cc.c 3631
decl ? 0 == if
{
# tcc_cc.c 3632
# tcc_cc.c 3633
opt_trace_parser ?1 char if
{
# tcc_cc.c 3634
"Ident %s has no declaration\n" { int 1 __var_args __var_args token_it ->s11_m_token ? = ; __var_args printf () } ;
}
# tcc_cc.c 2416
{
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
}
# tcc_cc.c 3637
decl ->s20_m_type ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3639
decl ->s20_m_storage_type ? ST_TYPEDEF ? == if
{
# tcc_cc.c 3640
# tcc_cc.c 3641
opt_trace_parser ?1 char if
{
# tcc_cc.c 3642
"Ident %s is typedef\n" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args printf () } ;
}
# tcc_cc.c 3643
next_token () ;
# tcc_cc.c 3644
decl ->s20_m_type ? return
}
else
{
# tcc_cc.c 3647
# tcc_cc.c 3648
opt_trace_parser ?1 char if
{
# tcc_cc.c 3649
"Ident %s is not a typedef\n" { int 1 __var_args __var_args token_it ->s11_m_token ? = ; __var_args printf () } ;
}
# tcc_cc.c 2416
{
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
}
}
# tcc_cc.c 2416
{
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
0 return
}
void parse_struct_or_union_specifier
{
int decl_kind decl_kind =:
int type_kind type_kind decl_kind ? DK_STRUCT ? == if { TYPE_KIND_STRUCT ? } else { TYPE_KIND_UNION ? } = ;
int type type 0 = ;
# tcc_cc.c 3664
token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 3665
int decl decl decl_kind ? token_it ->s11_m_token ? find_or_add_decl () = ;
# tcc_cc.c 3667
decl ->s20_m_type ? 0 == if
{
# tcc_cc.c 3668
# tcc_cc.c 3669
decl ->s20_m_type type_kind ? 0 0 new_type () = ;
}
# tcc_cc.c 3671
type decl ->s20_m_type ? = ;
# tcc_cc.c 3672
next_token () ;
}
# tcc_cc.c 3674
123 accept_term () if
{
# tcc_cc.c 3675
int parent parent cur_struct_or_union ? = ;
int 3 this_struct_or_union
# tcc_cc.c 3678
this_struct_or_union s22_m_is_struct + decl_kind ? DK_STRUCT ? == =1 ;
# tcc_cc.c 3679
this_struct_or_union s22_m_pos + 0 = ;
# tcc_cc.c 3680
this_struct_or_union s22_m_size + 0 = ;
# tcc_cc.c 3681
cur_struct_or_union this_struct_or_union = ;
int save_ident_decls save_ident_decls cur_ident_decls ? = ;
# tcc_cc.c 3683
do
{
# tcc_cc.c 3684
# tcc_cc.c 3685
0 parse_declaration () ! if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
125 accept_term () ! ! if { break }
}
int nr_decls nr_decls 0 = ;
# tcc_cc.c 3689
{
int decl1 decl1 cur_ident_decls ? = ;
do
{
decl1 ? save_ident_decls ? != ! if { break }
# tcc_cc.c 3690
nr_decls $ ? 1 + = 1 - ;
decl1 decl1 ->s20_m_prev ? = ;
}
}
# tcc_cc.c 3691
type ? 0 == if
{
# tcc_cc.c 3692
# tcc_cc.c 3693
type type_kind ? this_struct_or_union s22_m_size + ? 0 new_type () = ;
}
else
{
# tcc_cc.c 3696
type ->s18_m_size this_struct_or_union s22_m_size + ? = ;
}
int 200 decls
int i i nr_decls ? = ;
# tcc_cc.c 3699
{
int decl1 decl1 cur_ident_decls ? = ;
do
{
decl1 ? save_ident_decls ? != ! if { break }
# tcc_cc.c 3700
decls i $ ? 1 - = 4 * + decl1 ? = ;
decl1 decl1 ->s20_m_prev ? = ;
}
}
# tcc_cc.c 3701
{
# tcc_cc.c 3702
gen_start_struct_or_union () ;
# tcc_cc.c 3703
{
int i i 0 = ;
do
{
i ? nr_decls ? <s ! if { break }
# tcc_cc.c 3704
decls i ? 4 * + ? gen_struct_or_union_member () ;
i $ ? 1 + = 1 - ;
}
}
}
# tcc_cc.c 3706
type ? nr_decls ? decls type_set_decls () ;
# tcc_cc.c 3707
cur_ident_decls save_ident_decls ? = ;
# tcc_cc.c 3708
cur_struct_or_union parent ? = ;
}
# tcc_cc.c 3710
type ? return
0 return
}
void gen_enum_decl ;
void parse_enum_specifier
{
int type type 0 = ;
# tcc_cc.c 3722
token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 3723
int decl decl DK_ENUM ? token_it ->s11_m_token ? find_or_add_decl () = ;
# tcc_cc.c 3725
decl ->s20_m_type ? 0 == if
{
# tcc_cc.c 3726
# tcc_cc.c 3727
decl ->s20_m_type DK_ENUM ? 4 0 new_type () = ;
}
# tcc_cc.c 3729
type decl ->s20_m_type ? = ;
# tcc_cc.c 3730
next_token () ;
}
int next_enum_val next_enum_val 0 = ;
# tcc_cc.c 3733
123 accept_term () if
{
# tcc_cc.c 3734
# tcc_cc.c 3735
{
do
{
# tcc_cc.c 3736
# tcc_cc.c 3737
token_it ->s11_m_kind ? 105 != if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int const_decl const_decl DK_IDENT ? token_it ->s11_m_token ? base_type_S32 ? add_decl () = ;
# tcc_cc.c 3740
next_token () ;
# tcc_cc.c 3741
61 accept_term () if
{
# tcc_cc.c 3742
int expr expr parse_conditional_expr () = ;
# tcc_cc.c 3744
expr ? 0 == if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
# tcc_cc.c 3746
next_enum_val expr ? expr_eval () = ;
}
# tcc_cc.c 3748
const_decl ->s20_m_value next_enum_val ? new_expr_int_value () = ;
# tcc_cc.c 3749
const_decl ->s20_m_storage_type ST_CONST ? = ;
# tcc_cc.c 3750
const_decl ? gen_enum_decl () ;
# tcc_cc.c 3751
next_enum_val $ ? 1 + = 1 - ;
# tcc_cc.c 3752
44 accept_term () ! if
{
# tcc_cc.c 3753
break
}
# tcc_cc.c 3754
token_it ->s11_m_kind ? 125 == if
{
# tcc_cc.c 3755
break
}
}
}
# tcc_cc.c 3757
125 accept_term () ! if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
}
# tcc_cc.c 3760
type ? 0 == if
{
# tcc_cc.c 3761
type DK_ENUM ? 4 0 new_type () = ;
}
# tcc_cc.c 3762
type ? return
0 return
}
void parse_initializer
{
# tcc_cc.c 3774
123 accept_term () if
{
# tcc_cc.c 3775
int 2000 exprs
int nr_exprs nr_exprs 0 = ;
# tcc_cc.c 3778
{
do
{
# tcc_cc.c 3779
# tcc_cc.c 3780
exprs nr_exprs $ ? 1 + = 1 - 4 * + parse_initializer () = ;
# tcc_cc.c 3781
44 accept_term () ! if
{
# tcc_cc.c 3782
break
}
# tcc_cc.c 3783
token_it ->s11_m_kind ? 125 == if
{
# tcc_cc.c 3784
break
}
}
}
# tcc_cc.c 3786
125 accept_term () ! if
{
# tcc_cc.c 2416
# tcc_cc.c 2416
opt_trace_parser ?1 char if
{
# tcc_cc.c 2416
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2416
0 return
}
int expr_list expr_list 108 nr_exprs ? new_expr () = ;
# tcc_cc.c 3789
{
int i i 0 = ;
do
{
i ? nr_exprs ? <s ! if { break }
# tcc_cc.c 3790
expr_list ->s19_m_children i ? 4 * + exprs i ? 4 * + ? = ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 3791
expr_list ? return
}
# tcc_cc.c 3793
parse_assignment_expr () return
0 return
}
int add_tracing
int default_case_nr
int fall_through_case_nr
int label_statement
void parse_statement
{
int continue_expr continue_expr =:
int in_block in_block =:
# tcc_cc.c 3823
{
do
{
# tcc_cc.c 3824
# tcc_cc.c 3825
token_it ->s11_m_kind ? 105 == if
{
# tcc_cc.c 3826
int label label token_it ->s11_m_token ? find_label () = ;
# tcc_cc.c 3828
label ? 0 == && { DK_IDENT ? token_it ->s11_m_token ? find_decl () 0 == } if
{
# tcc_cc.c 3829
label token_it ->s11_m_token ? find_or_add_label () = ;
}
# tcc_cc.c 3830
label ? 0 != if
{
# tcc_cc.c 3831
# tcc_cc.c 3832
label_statement 1 =1 ;
# tcc_cc.c 3833
gen_indent () ;
# tcc_cc.c 3834
fcode ? ":%s\n" { int 1 __var_args __var_args label ->s21_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 3835
next_token () ;
# tcc_cc.c 3836
58 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3838
continue
}
}
# tcc_cc.c 3841
break
}
}
# tcc_cc.c 3843
fcode ? "# %s %d\n" { int 2 __var_args __var_args token_it ->s11_m_filename ? = ; __var_args 4 + token_it ->s11_m_line ? = ; __var_args fprintf () } ;
# tcc_cc.c 3844
1014 accept_term () if
{
# tcc_cc.c 3845
# tcc_cc.c 3846
40 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
int cond cond parse_expr () = ;
# tcc_cc.c 3849
cond ? 0 == if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3851
41 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3853
gen_indent () ;
# tcc_cc.c 3854
cond ? 1 gen_expr () ;
# tcc_cc.c 3855
fcode ? "if\n" 0 fprintf () ;
# tcc_cc.c 3856
gen_stats_open () ;
# tcc_cc.c 3857
1 continue_expr ? parse_statement () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3859
gen_stats_close () ;
# tcc_cc.c 3860
1008 accept_term () if
{
# tcc_cc.c 3861
# tcc_cc.c 3862
gen_indent () ;
# tcc_cc.c 3863
fcode ? "else\n" 0 fprintf () ;
# tcc_cc.c 3864
gen_stats_open () ;
# tcc_cc.c 3865
1 continue_expr ? parse_statement () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3867
gen_stats_close () ;
}
# tcc_cc.c 3869
1 return
}
# tcc_cc.c 3871
1028 accept_term () if
{
# tcc_cc.c 3872
# tcc_cc.c 3873
gen_indent () ;
# tcc_cc.c 3874
fcode ? "do\n" 0 fprintf () ;
# tcc_cc.c 3875
gen_stats_open () ;
# tcc_cc.c 3876
40 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
int cond cond parse_expr () = ;
# tcc_cc.c 3879
cond ? 0 == if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3881
41 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3883
gen_indent () ;
# tcc_cc.c 3884
cond ? 1 gen_expr () ;
# tcc_cc.c 3885
fcode ? "! if { break }\n" 0 fprintf () ;
# tcc_cc.c 3886
1 0 parse_statement () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3888
gen_stats_close () ;
# tcc_cc.c 3889
1 return
}
# tcc_cc.c 3891
1006 accept_term () if
{
# tcc_cc.c 3892
# tcc_cc.c 3893
gen_indent () ;
# tcc_cc.c 3894
fcode ? "do\n" 0 fprintf () ;
# tcc_cc.c 3895
gen_stats_open () ;
# tcc_cc.c 3896
1 0 parse_statement () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3898
1028 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3900
40 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
int cond cond parse_expr () = ;
# tcc_cc.c 3903
cond ? 0 == if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3905
41 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3907
59 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3909
gen_indent () ;
# tcc_cc.c 3910
cond ? 1 gen_expr () ;
# tcc_cc.c 3911
fcode ? "! if { break }\n" 0 fprintf () ;
# tcc_cc.c 3912
gen_stats_close () ;
# tcc_cc.c 3913
1 return
}
# tcc_cc.c 3915
1012 accept_term () if
{
# tcc_cc.c 3916
# tcc_cc.c 3917
gen_stats_open () ;
int save_ident_decls save_ident_decls cur_ident_decls ? = ;
# tcc_cc.c 3919
40 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3921
0 parse_declaration () ! if
{
# tcc_cc.c 3922
int init_expr init_expr parse_expr () = ;
# tcc_cc.c 3924
init_expr ? gen_stat_expr () ;
# tcc_cc.c 3925
59 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
}
# tcc_cc.c 3928
gen_indent () ;
# tcc_cc.c 3929
fcode ? "do\n" 0 fprintf () ;
# tcc_cc.c 3930
gen_stats_open () ;
int cond cond parse_expr () = ;
# tcc_cc.c 3932
cond ? 0 != if
{
# tcc_cc.c 3933
# tcc_cc.c 3934
gen_indent () ;
# tcc_cc.c 3935
cond ? 1 gen_expr () ;
# tcc_cc.c 3936
fcode ? "! if { break }\n" 0 fprintf () ;
}
# tcc_cc.c 3938
59 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
int next_expr next_expr parse_expr () = ;
# tcc_cc.c 3941
41 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3943
1 next_expr ? parse_statement () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3945
next_expr ? gen_stat_expr () ;
# tcc_cc.c 3946
cur_ident_decls save_ident_decls ? = ;
# tcc_cc.c 3947
gen_stats_close () ;
# tcc_cc.c 3948
gen_stats_close () ;
# tcc_cc.c 3949
1 return
}
# tcc_cc.c 3951
1000 accept_term () if
{
# tcc_cc.c 3952
# tcc_cc.c 3953
59 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3955
gen_indent () ;
# tcc_cc.c 3956
fcode ? "break\n" 0 fprintf () ;
# tcc_cc.c 3957
1 return
}
# tcc_cc.c 3959
1004 accept_term () if
{
# tcc_cc.c 3960
# tcc_cc.c 3961
59 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3963
continue_expr ? gen_stat_expr () ;
# tcc_cc.c 3964
gen_indent () ;
# tcc_cc.c 3965
fcode ? "continue\n" 0 fprintf () ;
# tcc_cc.c 3966
1 return
}
# tcc_cc.c 3968
1023 accept_term () if
{
# tcc_cc.c 3969
# tcc_cc.c 3970
40 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
int switch_expr switch_expr parse_expr () = ;
# tcc_cc.c 3973
switch_expr ? 0 == if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3975
41 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3977
123 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3979
gen_indent () ;
# tcc_cc.c 3980
switch_expr ? 1 gen_expr () ;
# tcc_cc.c 3981
fcode ? "do\n" 0 fprintf () ;
# tcc_cc.c 3982
gen_stats_open () ;
int fall_through fall_through 0 =1 ;
int has_default has_default 0 =1 ;
# tcc_cc.c 3985
do
{
token_it ->s11_m_kind ? 1001 == || { token_it ->s11_m_kind ? 1005 == } ! if { break }
# tcc_cc.c 3986
int 100 case_labels
int nr_case_labels nr_case_labels 0 = ;
int default_case default_case 0 =1 ;
# tcc_cc.c 3990
{
do
{
# tcc_cc.c 3991
# tcc_cc.c 3992
1001 accept_term () if
{
# tcc_cc.c 3993
int expr expr parse_expr () = ;
# tcc_cc.c 3995
expr ? 0 == if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3997
58 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 3999
nr_case_labels ? 100 <s if
{
# tcc_cc.c 4000
case_labels nr_case_labels $ ? 1 + = 1 - 4 * + expr ? expr_eval () = ;
}
else
{
# tcc_cc.c 4002
"Error: more than 50 case label\n" 0 printf () ;
}
}
else
{
# tcc_cc.c 4004
1005 accept_term () if
{
# tcc_cc.c 4005
# tcc_cc.c 4006
58 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 4008
default_case 1 =1 ;
# tcc_cc.c 4009
has_default 1 =1 ;
}
else
{
# tcc_cc.c 4012
break
}
}
}
}
# tcc_cc.c 4014
nr_case_labels ? 0 == if
{
# tcc_cc.c 4015
# tcc_cc.c 4016
gen_indent () ;
# tcc_cc.c 4017
fcode ? "0 " 0 fprintf () ;
}
else
{
# tcc_cc.c 4020
# tcc_cc.c 4021
{
int i i 0 = ;
do
{
i ? nr_case_labels ? <s ! if { break }
# tcc_cc.c 4022
# tcc_cc.c 4023
gen_indent () ;
# tcc_cc.c 4024
i ? 0 >s if
{
# tcc_cc.c 4025
# tcc_cc.c 4026
fcode ? "|| { " 0 fprintf () ;
}
# tcc_cc.c 4029
fcode ? "$ %u == " { int 1 __var_args __var_args case_labels i ? 4 * + ? = ; __var_args fprintf () } ;
# tcc_cc.c 4030
i ? 1 + nr_case_labels ? <s if
{
# tcc_cc.c 4031
fcode ? "\n" 0 fprintf () ;
}
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4033
{
int i i 1 = ;
do
{
i ? nr_case_labels ? <s ! if { break }
# tcc_cc.c 4034
fcode ? "} " 0 fprintf () ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4035
nr_case_labels ? 1 >s if
{
# tcc_cc.c 4036
fcode ? " " 0 fprintf () ;
}
}
# tcc_cc.c 4038
fcode ? "if\n" 0 fprintf () ;
# tcc_cc.c 4039
gen_stats_open () ;
# tcc_cc.c 4040
nr_case_labels ? 0 >s if
{
# tcc_cc.c 4041
# tcc_cc.c 4042
gen_indent () ;
# tcc_cc.c 4043
fcode ? ";\n" 0 fprintf () ;
}
# tcc_cc.c 4045
fall_through ?1 char if
{
# tcc_cc.c 4046
# tcc_cc.c 4047
gen_indent () ;
# tcc_cc.c 4048
fcode ? ":_fall_through_case_%d\n" { int 1 __var_args __var_args fall_through_case_nr ? = ; __var_args fprintf () } ;
}
# tcc_cc.c 4050
default_case ?1 char if
{
# tcc_cc.c 4051
# tcc_cc.c 4052
gen_indent () ;
# tcc_cc.c 4053
fcode ? ":_default_case_%d\n" { int 1 __var_args __var_args default_case_nr ? = ; __var_args fprintf () } ;
}
int has_break has_break 0 =1 ;
# tcc_cc.c 4057
{
int go go 1 =1 ;
do
{
go ?1 char ! if { break }
# tcc_cc.c 4058
# tcc_cc.c 4059
token_it ->s11_m_kind ? 1000 == || { token_it ->s11_m_kind ? 1018 == } || { token_it ->s11_m_kind ? 1013 == } if
{
# tcc_cc.c 4060
has_break 1 =1 ;
}
# tcc_cc.c 4061
label_statement 0 =1 ;
# tcc_cc.c 4062
go 0 continue_expr ? parse_statement () =1 ;
# tcc_cc.c 4063
label_statement ?1 char if
{
# tcc_cc.c 4064
has_break 0 =1 ;
}
}
}
# tcc_cc.c 4066
token_it ->s11_m_kind ? 125 == && { has_break ?1 char ! } if
{
# tcc_cc.c 4067
# tcc_cc.c 4068
gen_indent () ;
# tcc_cc.c 4069
fcode ? "break\n" 0 fprintf () ;
# tcc_cc.c 4070
has_break 1 =1 ;
}
# tcc_cc.c 4072
fall_through has_break ?1 char ! =1 ;
# tcc_cc.c 4073
fall_through ?1 char if
{
# tcc_cc.c 4074
# tcc_cc.c 4075
fall_through_case_nr $ ? 1 + = 1 - ;
# tcc_cc.c 4076
gen_indent () ;
# tcc_cc.c 4077
fcode ? "goto _fall_through_case_%d\n" { int 1 __var_args __var_args fall_through_case_nr ? = ; __var_args fprintf () } ;
}
# tcc_cc.c 4079
gen_stats_close () ;
}
# tcc_cc.c 4081
125 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 4083
gen_indent () ;
# tcc_cc.c 4084
has_default ?1 char if
{
# tcc_cc.c 4085
# tcc_cc.c 4086
fcode ? "; goto _default_case_%d\n" { int 1 __var_args __var_args default_case_nr ? = ; __var_args fprintf () } ;
# tcc_cc.c 4087
default_case_nr $ ? 1 + = 1 - ;
}
else
{
# tcc_cc.c 4090
fcode ? "; break\n" 0 fprintf () ;
}
# tcc_cc.c 4091
gen_stats_close () ;
# tcc_cc.c 4092
1 return
}
# tcc_cc.c 4094
1018 accept_term () if
{
# tcc_cc.c 4095
# tcc_cc.c 4096
gen_indent () ;
int ret_value ret_value parse_expr () = ;
# tcc_cc.c 4098
ret_value ? 0 != if
{
# tcc_cc.c 4099
ret_value ? 1 gen_expr () ;
}
else
{
# tcc_cc.c 4101
fcode ? "0 " 0 fprintf () ;
}
# tcc_cc.c 4102
add_tracing ?1 char if
{
# tcc_cc.c 4103
fcode ? "\"Exit\\n\" stdout ? fputs () ; \n" 0 fprintf () ;
}
# tcc_cc.c 4104
fcode ? "return\n" 0 fprintf () ;
# tcc_cc.c 4105
59 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 4107
1 return
}
# tcc_cc.c 4109
1013 accept_term () if
{
# tcc_cc.c 4110
# tcc_cc.c 4111
token_it ->s11_m_token ? find_or_add_label () ;
# tcc_cc.c 4112
gen_indent () ;
# tcc_cc.c 4113
fcode ? "goto %s\n" { int 1 __var_args __var_args token_it ->s11_m_token ? = ; __var_args fprintf () } ;
# tcc_cc.c 4114
next_token () ;
# tcc_cc.c 4115
59 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 4117
1 return
}
# tcc_cc.c 4119
123 accept_term () if
{
# tcc_cc.c 4120
# tcc_cc.c 4121
in_block ?1 char ! if
{
# tcc_cc.c 4122
gen_stats_open () ;
}
# tcc_cc.c 4123
continue_expr ? parse_statements () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 4124
# tcc_cc.c 4125
125 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 4127
in_block ?1 char ! if
{
# tcc_cc.c 4128
gen_stats_close () ;
}
# tcc_cc.c 4129
1 return
}
int expr expr parse_expr () = ;
# tcc_cc.c 4132
expr ? gen_stat_expr () ;
# tcc_cc.c 4133
59 accept_term () ! if
{
# tcc_cc.c 2415
# tcc_cc.c 2415
opt_trace_parser ?1 char if
{
# tcc_cc.c 2415
stderr ? "Fail in %s at %d\n" { int 2 __var_args __var_args "" = ; __var_args 4 + 0 = ; __var_args fprintf () } ;
}
# tcc_cc.c 2415
0 return
}
# tcc_cc.c 4135
1 return
0 return
}
void parse_statements
{
int continue_expr continue_expr =:
int save_ident_decls save_ident_decls cur_ident_decls ? = ;
# tcc_cc.c 4145
do
{
# tcc_cc.c 4146
token_it ->s11_m_kind ? 125 != && { 0 parse_declaration () || { 0 continue_expr ? parse_statement () } } ! if { break }
}
# tcc_cc.c 4148
cur_ident_decls save_ident_decls ? = ;
# tcc_cc.c 4149
1 return
0 return
}
void add_base_type
{
int base_type base_type =:
int name name =:
# tcc_cc.c 4156
DK_IDENT ? name ? base_type ? add_decl () ;
# tcc_cc.c 4157
cur_ident_decls ->s20_m_storage_type ST_TYPEDEF ? = ;
0 return
}
void add_function
{
int result_type result_type =:
int name name =:
int type type TYPE_KIND_FUNCTION ? 4 1 new_type () = ;
# tcc_cc.c 4163
type ->s18_m_members ? 0 4 * + result_type ? = ;
# tcc_cc.c 4164
DK_IDENT ? name ? type ? add_decl () ;
0 return
}
void add_predefined_types
{
# tcc_cc.c 4169
"uint32_t" base_type_U32 ? add_base_type () ;
# tcc_cc.c 4170
"int32_t" base_type_S32 ? add_base_type () ;
# tcc_cc.c 4171
"uint16_t" base_type_U16 ? add_base_type () ;
# tcc_cc.c 4172
"uint8_t" base_type_U8 ? add_base_type () ;
# tcc_cc.c 4173
"int8_t" base_type_S8 ? add_base_type () ;
# tcc_cc.c 4174
"size_t" base_type_U32 ? add_base_type () ;
# tcc_cc.c 4176
"ssize_t" base_type_U32 ? add_base_type () ;
# tcc_cc.c 4177
"jmp_buf" base_type_jmp_buf ? add_base_type () ;
0 return
}
void parse_file
{
int only_preprocess only_preprocess =:
int input_filename input_filename =:
# tcc_cc.c 4182
include_path ? input_filename ? strcpy () ;
# tcc_cc.c 4183
end_include_prefix include_path ? = ;
# tcc_cc.c 4184
{
int s s include_path ? = ;
do
{
s ? ?1 char 0 != ! if { break }
# tcc_cc.c 4185
s ? ?1 char 47 == if
{
# tcc_cc.c 4186
end_include_prefix s ? 1 + = ;
}
s $ ? 1 + = 1 - ;
}
}
int input_it input_it input_filename ? new_file_iterator () = ;
# tcc_cc.c 4189
input_it ->s7_m_base s6_m_ch + ?1 char 0 == if
{
# tcc_cc.c 4190
# tcc_cc.c 4191
"ERROR: Could not open file %s or it was empty\n" { int 1 __var_args __var_args input_filename ? = ; __var_args printf () } ;
# tcc_cc.c 4192
0 return
}
int splice_it splice_it input_it ->s7_m_base new_line_splice_iterator () = ;
int comment_it comment_it splice_it ->s8_m_base new_comment_strip_iterator () = ;
int include_it include_it comment_it ->s9_m_base new_include_iterator () = ;
int tokenizer_it tokenizer_it include_it ->s10_m_base new_tokenizer () = ;
int conditional_it conditional_it include_it ? tokenizer_it ->s12_m_base new_conditional_iterator () = ;
int expand_it expand_it conditional_it ->s15_m_base new_expand_iterator () = ;
# tcc_cc.c 4201
token_it expand_it ? = ;
# tcc_cc.c 4203
token_it token_it ? 1 token_it ->s11_m_next ? () = ;
# tcc_cc.c 4205
only_preprocess ?1 char if
{
# tcc_cc.c 4206
# tcc_cc.c 4207
"tcc_p.c" output_preprocessor () ;
# tcc_cc.c 4208
1 return
}
# tcc_cc.c 4211
do
{
0 parse_declaration () ! if { break }
# tcc_cc.c 4212
}
# tcc_cc.c 4215
token_it ? 0 != && { token_it ->s11_m_kind ? 0 != } if
{
# tcc_cc.c 4216
# tcc_cc.c 4217
"Parsed %s till %s:%d.%d: kind:%d token:'%s'\n" { int 6 __var_args __var_args input_filename ? = ; __var_args 4 + token_it ->s11_m_filename ? = ; __var_args 8 + token_it ->s11_m_line ? = ; __var_args 12 + token_it ->s11_m_column ? = ; __var_args 16 + token_it ->s11_m_kind ? = ; __var_args 20 + token_it ->s11_m_token ? = ; __var_args printf () } ;
# tcc_cc.c 4218
0 return
}
# tcc_cc.c 4220
1 return
0 return
}
int indent
void gen_indent
{
# tcc_cc.c 4228
{
int i i 0 = ;
do
{
i ? indent ? <s ! if { break }
# tcc_cc.c 4229
fcode ? " " 0 fprintf () ;
i $ ? 1 + = 1 - ;
}
}
0 return
}
void gen_newline
{
# tcc_cc.c 4234
fcode ? "\n" 0 fprintf () ;
0 return
}
int struct_union_nr
void gen_start_struct_or_union
{
# tcc_cc.c 4241
struct_union_nr $ ? 1 + = 1 - ;
0 return
}
void gen_enum_decl
{
int decl decl =:
# tcc_cc.c 4246
fcode ? "int %s\n" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
0 return
}
void gen_struct_or_union_member
{
int decl decl =:
# tcc_cc.c 4251
decl ->s20_m_su_nr struct_union_nr ? = ;
# tcc_cc.c 4252
fcode ? "const s%d_m_%s %d\n" { int 3 __var_args __var_args struct_union_nr ? = ; __var_args 4 + decl ->s20_m_name ? = ; __var_args 8 + decl ->s20_m_pos ? = ; __var_args fprintf () } ;
0 return
}
void gen_initializer ;
void gen_variable_decl
{
int decl decl =:
# tcc_cc.c 4259
gen_indent () ;
# tcc_cc.c 4260
decl ->s20_m_storage_type ? ST_STATIC ? == if
{
# tcc_cc.c 4261
fcode ? "static " 0 fprintf () ;
}
else
{
# tcc_cc.c 4263
fcode ? "int " 0 fprintf () ;
}
# tcc_cc.c 4264
decl ->s20_m_type ->s18_m_size ? 4 >s if
{
# tcc_cc.c 4265
fcode ? "%d " { int 1 __var_args __var_args decl ->s20_m_type ->s18_m_size ? 3 + 4 /s = ; __var_args fprintf () } ;
}
# tcc_cc.c 4266
fcode ? "%s" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 4267
inside_function ?1 char && { decl ->s20_m_value ? 0 != } if
{
# tcc_cc.c 4268
# tcc_cc.c 4269
fcode ? " %s " { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 4270
decl ->s20_m_value ? decl ->s20_m_type ? gen_initializer () ;
}
# tcc_cc.c 4272
fcode ? "\n" 0 fprintf () ;
0 return
}
void gen_function_start
{
int decl decl =:
int is_main is_main decl ->s20_m_name ? "main" strcmp () 0 == =1 ;
# tcc_cc.c 4278
is_main ?1 char if
{
# tcc_cc.c 4279
fcode ? "void __init_globals__ ;\n" 0 fprintf () ;
}
int type type decl ->s20_m_type ? = ;
# tcc_cc.c 4281
type ->s18_m_members ? 0 4 * + ->s18_m_size ? 4 >s if
{
# tcc_cc.c 4282
"Warning: return type %s has size %d\n" { int 2 __var_args __var_args decl ->s20_m_name ? = ; __var_args 4 + type ->s18_m_members ? 0 4 * + ->s18_m_size ? = ; __var_args printf () } ;
}
# tcc_cc.c 4283
fcode ? "void %s\n{\n" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 4284
indent $ ? 1 + = 1 - ;
# tcc_cc.c 4285
{
int i i type ->s18_m_nr_decls ? 1 - = ;
do
{
i ? 0 >=s ! if { break }
# tcc_cc.c 4286
int mem_decl mem_decl type ->s18_m_decls ? i ? 4 * + ? = ;
# tcc_cc.c 4288
mem_decl ? 0 == if
{
# tcc_cc.c 4289
# tcc_cc.c 4290
gen_indent () ;
# tcc_cc.c 4291
fcode ? "int __var_args __var_args =:\n" 0 fprintf () ;
}
else
{
# tcc_cc.c 4294
# tcc_cc.c 4295
mem_decl ->s20_m_type ->s18_m_size ? 4 >s if
{
# tcc_cc.c 4296
"Warning: argument %s of %s has size %d\n" { int 3 __var_args __var_args mem_decl ->s20_m_name ? = ; __var_args 4 + decl ->s20_m_name ? = ; __var_args 8 + mem_decl ->s20_m_type ->s18_m_size ? = ; __var_args printf () } ;
}
# tcc_cc.c 4297
gen_indent () ;
# tcc_cc.c 4298
fcode ? "int %s %s =:\n" { int 2 __var_args __var_args mem_decl ->s20_m_name ? = ; __var_args 4 + mem_decl ->s20_m_name ? = ; __var_args fprintf () } ;
}
i $ ? 1 - = 1 + ;
}
}
# tcc_cc.c 4301
is_main ?1 char if
{
# tcc_cc.c 4302
# tcc_cc.c 4303
gen_indent () ;
# tcc_cc.c 4304
fcode ? "__init_globals__ ()\n" 0 fprintf () ;
# tcc_cc.c 4305
gen_indent () ;
# tcc_cc.c 4306
fcode ? "_sys_env argv ? argc ? 4 * 4 + + = ;\n" 0 fprintf () ;
}
# tcc_cc.c 4308
add_tracing ?1 char if
{
# tcc_cc.c 4309
# tcc_cc.c 4310
gen_indent () ;
# tcc_cc.c 4311
fcode ? "\"Enter %s\\n\" stdout ? fputs () ;\n" { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
}
# tcc_cc.c 4313
inside_function 1 =1 ;
0 return
}
void gen_function_end
{
# tcc_cc.c 4318
inside_function 0 =1 ;
# tcc_cc.c 4319
indent $ ? 1 - = 1 + ;
# tcc_cc.c 4320
fcode ? "\t" 0 fprintf () ;
# tcc_cc.c 4321
add_tracing ?1 char if
{
# tcc_cc.c 4322
fcode ? "\"Exit\\n\" stdout ? fputs () ; \n" 0 fprintf () ;
}
# tcc_cc.c 4323
fcode ? "0 return\n}\n" 0 fprintf () ;
0 return
}
void gen_stats_open
{
# tcc_cc.c 4328
gen_indent () ;
# tcc_cc.c 4329
fcode ? "{\n" 0 fprintf () ;
# tcc_cc.c 4330
indent $ ? 1 + = 1 - ;
0 return
}
void gen_stats_close
{
# tcc_cc.c 4335
indent $ ? 1 - = 1 + ;
# tcc_cc.c 4336
gen_indent () ;
# tcc_cc.c 4337
fcode ? "}\n" 0 fprintf () ;
0 return
}
void is_lvalue
{
int expr expr =:
# tcc_cc.c 4342
expr ->s19_m_kind ? 105 == || { expr ->s19_m_kind ? 507 == } || { expr ->s19_m_kind ? 46 == } || { expr ->s19_m_kind ? 91 == } || { expr ->s19_m_kind ? 2006 == } && { expr ->s19_m_type ->s18_m_kind ? TYPE_KIND_ARRAY ? != } && { expr ->s19_m_type ->s18_m_kind ? TYPE_KIND_FUNCTION ? != } return
0 return
}
int has_error
void expr_print_error
{
int mesg mesg =:
int expr expr =:
# tcc_cc.c 4355
"%s %d.%d: Error: %s\n" { int 4 __var_args __var_args expr ->s19_m_filename ? = ; __var_args 4 + expr ->s19_m_line ? = ; __var_args 8 + expr ->s19_m_column ? = ; __var_args 12 + mesg ? = ; __var_args printf () } ;
# tcc_cc.c 4356
{
int i i 0 = ;
do
{
i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4357
# tcc_cc.c 4358
"Operand %d: " { int 1 __var_args __var_args i ? = ; __var_args printf () } ;
# tcc_cc.c 4359
stdout ? expr ->s19_m_children i ? 4 * + ? expr_print () ;
# tcc_cc.c 4360
"\n" 0 printf () ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4362
has_error 1 =1 ;
0 return
}
void gen_expr
{
int as_value as_value =:
int expr expr =:
# tcc_cc.c 4367
expr ? 0 == if
{
# tcc_cc.c 4368
0 return
}
int expr_size_ind expr_size_ind expr ->s19_m_type ? 0 == if { "" } else { expr ->s19_m_type ->s18_m_size ? 1 == if { "1" } else { expr ->s19_m_type ->s18_m_size ? 2 == if { "2" } else { "" } } } = ;
int multiple multiple expr ->s19_m_type ? 0 != && { expr ->s19_m_type ->s18_m_size ? 4 >s } =1 ;
# tcc_cc.c 4371
expr ->s19_m_kind ? do
{
$ 105 == if
{
;
# tcc_cc.c 4373
fcode ? "%s " { int 1 __var_args __var_args expr ->s19_m_str_val ? = ; __var_args fprintf () } ;
# tcc_cc.c 4374
break
# tcc_cc.c 4375
}
$ 48 == if
{
;
# tcc_cc.c 4376
fcode ? "%u " { int 1 __var_args __var_args expr ->s19_m_int_val ? = ; __var_args fprintf () } ;
# tcc_cc.c 4377
break
# tcc_cc.c 4378
}
$ 34 == if
{
;
# tcc_cc.c 4379
fcode ? "\"" 0 fprintf () ;
# tcc_cc.c 4380
{
int i i 0 = ;
do
{
i ? expr ->s19_m_int_val ? <s ! if { break }
# tcc_cc.c 4381
int ch ch expr ->s19_m_str_val ? i ? + ?1 char =1 ;
# tcc_cc.c 4383
ch ?1 0 == if
{
# tcc_cc.c 4384
fcode ? "\\0" 0 fprintf () ;
}
else
{
# tcc_cc.c 4385
ch ?1 10 == if
{
# tcc_cc.c 4386
fcode ? "\\n" 0 fprintf () ;
}
else
{
# tcc_cc.c 4387
ch ?1 13 == if
{
# tcc_cc.c 4388
fcode ? "\\r" 0 fprintf () ;
}
else
{
# tcc_cc.c 4389
ch ?1 9 == if
{
# tcc_cc.c 4390
fcode ? "\\t" 0 fprintf () ;
}
else
{
# tcc_cc.c 4391
ch ?1 34 == || { ch ?1 92 == } if
{
# tcc_cc.c 4392
fcode ? "\\%c" { int 1 __var_args __var_args ch ?1 = ; __var_args fprintf () } ;
}
else
{
# tcc_cc.c 4393
ch ?1 32 <s || { ch ?1 127 >= } if
{
# tcc_cc.c 4394
fcode ? "\\x%x%x" { int 2 __var_args __var_args ch ?1 4 >> 15 & = ; __var_args 4 + ch ?1 15 & = ; __var_args fprintf () } ;
}
else
{
# tcc_cc.c 4396
fcode ? "%c" { int 1 __var_args __var_args ch ?1 = ; __var_args fprintf () } ;
}
}
}
}
}
}
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4398
fcode ? "\" " 0 fprintf () ;
# tcc_cc.c 4399
break
# tcc_cc.c 4400
}
$ 99 == if
{
;
# tcc_cc.c 4401
expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4402
expr ->s19_m_type ->s18_m_kind ? TYPE_KIND_BASE ? == if
{
# tcc_cc.c 4403
# tcc_cc.c 4404
expr ->s19_m_type ->s18_m_base_type ? do
{
$ 5 == if
{
;
# tcc_cc.c 4406
fcode ? "0xFF & " 0 fprintf () ;
# tcc_cc.c 4406
break
# tcc_cc.c 4407
}
$ 7 == if
{
;
# tcc_cc.c 4407
fcode ? "char " 0 fprintf () ;
# tcc_cc.c 4407
break
# tcc_cc.c 4408
}
$ 9 == if
{
;
# tcc_cc.c 4408
fcode ? "0xFFFF & " 0 fprintf () ;
# tcc_cc.c 4408
break
# tcc_cc.c 4409
}
0 if
{
:_default_case_1
# tcc_cc.c 4409
break
# tcc_cc.c 4410
}
; goto _default_case_1
}
}
# tcc_cc.c 4412
break
# tcc_cc.c 4413
}
$ 44 == if
{
;
# tcc_cc.c 4414
{
int i i 0 = ;
do
{
i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4415
# tcc_cc.c 4416
expr ->s19_m_children i ? 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4417
i ? expr ->s19_m_nr_children ? 1 - <s if
{
# tcc_cc.c 4418
fcode ? "; " 0 fprintf () ;
}
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4420
break
# tcc_cc.c 4421
}
$ 33 ==
|| { $ 126 == } if
{
;
# tcc_cc.c 4423
expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4424
fcode ? "%c " { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4425
break
# tcc_cc.c 4426
}
$ 862 == if
{
;
# tcc_cc.c 4427
expr ->s19_m_children 1 4 * + ->s19_m_kind ? 48 == && { expr ->s19_m_children 1 4 * + ->s19_m_int_val ? 31 >s } if
{
# tcc_cc.c 4428
# tcc_cc.c 4429
fcode ? "0 " 0 fprintf () ;
# tcc_cc.c 4430
break
}
# tcc_cc.c 4433
goto _fall_through_case_1
}
$ 43 ==
|| { $ 45 ==
|| { $ 42 ==
|| { $ 94 ==
|| { $ 38 ==
|| { $ 124 ==
|| { $ 502 ==
|| { $ 860 ==
|| { $ 501 == } } } } } } } } if
{
;
:_fall_through_case_1
# tcc_cc.c 4442
expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4443
expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4444
expr ->s19_m_kind ? do
{
$ 43 == if
{
;
# tcc_cc.c 4447
expr ->s19_m_children 0 4 * + ? expr_is_pointer_size_gt_1 () if
{
# tcc_cc.c 4448
fcode ? "%d * " { int 1 __var_args __var_args expr ->s19_m_children 0 4 * + ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? = ; __var_args fprintf () } ;
}
else
{
# tcc_cc.c 4449
expr ->s19_m_children 1 4 * + ? expr_is_pointer_size_gt_1 () if
{
# tcc_cc.c 4450
fcode ? ">< %d * " { int 1 __var_args __var_args expr ->s19_m_children 1 4 * + ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? = ; __var_args fprintf () } ;
}
}
# tcc_cc.c 4451
fcode ? "+ " 0 fprintf () ;
# tcc_cc.c 4452
break
# tcc_cc.c 4453
}
$ 45 == if
{
;
# tcc_cc.c 4454
expr ->s19_m_children 0 4 * + ->s19_m_type ? type_is_pointer () if
{
# tcc_cc.c 4455
int base_size base_size expr ->s19_m_children 0 4 * + ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? = ;
# tcc_cc.c 4457
expr ->s19_m_children 1 4 * + ->s19_m_type ? type_is_pointer () if
{
# tcc_cc.c 4458
# tcc_cc.c 4459
fcode ? "-p " 0 fprintf () ;
# tcc_cc.c 4460
base_size ? 1 >s if
{
# tcc_cc.c 4461
fcode ? "%d / " { int 1 __var_args __var_args base_size ? = ; __var_args fprintf () } ;
}
}
else
{
# tcc_cc.c 4464
# tcc_cc.c 4465
base_size ? 1 >s if
{
# tcc_cc.c 4466
fcode ? "%d * " { int 1 __var_args __var_args base_size ? = ; __var_args fprintf () } ;
}
# tcc_cc.c 4467
fcode ? "- " 0 fprintf () ;
}
}
else
{
# tcc_cc.c 4471
fcode ? "- " 0 fprintf () ;
}
# tcc_cc.c 4472
break
# tcc_cc.c 4473
}
$ 860 == if
{
;
# tcc_cc.c 4473
fcode ? "<< " 0 fprintf () ;
# tcc_cc.c 4473
break
# tcc_cc.c 4474
}
$ 862 == if
{
;
# tcc_cc.c 4474
fcode ? ">> " 0 fprintf () ;
# tcc_cc.c 4474
break
# tcc_cc.c 4475
}
$ 501 == if
{
;
# tcc_cc.c 4475
fcode ? "== " 0 fprintf () ;
# tcc_cc.c 4475
break
# tcc_cc.c 4476
}
$ 502 == if
{
;
# tcc_cc.c 4476
fcode ? "!= " 0 fprintf () ;
# tcc_cc.c 4476
break
# tcc_cc.c 4477
}
0 if
{
:_default_case_2
# tcc_cc.c 4477
fcode ? "%c " { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4477
break
# tcc_cc.c 4478
}
; goto _default_case_2
}
# tcc_cc.c 4479
break
# tcc_cc.c 4480
}
$ 61 == if
{
;
# tcc_cc.c 4481
expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4482
multiple ?1 char if
{
# tcc_cc.c 4483
# tcc_cc.c 4484
expr ->s19_m_children 1 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4485
fcode ? "{ int src src =: int trg trg =: " 0 fprintf () ;
# tcc_cc.c 4486
fcode ? "trg ? src ? ? = ; " 0 fprintf () ;
# tcc_cc.c 4487
{
int i i 4 = ;
do
{
i ? expr ->s19_m_type ->s18_m_size ? <s ! if { break }
# tcc_cc.c 4488
fcode ? "trg ? %d + src ? %d + ? = ; " { int 2 __var_args __var_args i ? = ; __var_args 4 + i ? = ; __var_args fprintf () } ;
i $ ? 4 + = ;
}
}
# tcc_cc.c 4489
fcode ? "trg ? } " 0 fprintf () ;
}
else
{
# tcc_cc.c 4492
# tcc_cc.c 4493
expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4494
fcode ? "=%s " { int 1 __var_args __var_args expr_size_ind ? = ; __var_args fprintf () } ;
}
# tcc_cc.c 4496
break
# tcc_cc.c 4497
}
$ 47 ==
|| { $ 37 ==
|| { $ 60 ==
|| { $ 62 ==
|| { $ 503 ==
|| { $ 504 == } } } } } if
{
;
# tcc_cc.c 4503
expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4504
expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4505
expr ->s19_m_kind ? do
{
$ 503 == if
{
;
# tcc_cc.c 4507
fcode ? "<=" 0 fprintf () ;
# tcc_cc.c 4507
break
# tcc_cc.c 4508
}
$ 504 == if
{
;
# tcc_cc.c 4508
fcode ? ">=" 0 fprintf () ;
# tcc_cc.c 4508
break
# tcc_cc.c 4509
}
0 if
{
:_default_case_3
# tcc_cc.c 4509
fcode ? "%c" { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4509
break
# tcc_cc.c 4510
}
; goto _default_case_3
}
# tcc_cc.c 4511
expr ->s19_m_children 0 4 * + ->s19_m_type ? type_is_signed_integer () || { expr ->s19_m_children 1 4 * + ->s19_m_type ? type_is_signed_integer () } if
{
# tcc_cc.c 4513
fcode ? "s" 0 fprintf () ;
}
# tcc_cc.c 4514
fcode ? " " 0 fprintf () ;
# tcc_cc.c 4515
break
# tcc_cc.c 4516
}
$ 642 ==
|| { $ 647 ==
|| { $ 637 ==
|| { $ 643 ==
|| { $ 645 ==
|| { $ 660 ==
|| { $ 662 ==
|| { $ 694 ==
|| { $ 638 ==
|| { $ 724 == } } } } } } } } } if
{
;
# tcc_cc.c 4526
multiple ?1 char if
{
# tcc_cc.c 4527
expr ? "multiple assignment" expr_print_error () ;
}
# tcc_cc.c 4528
expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4529
fcode ? "$ ?%s " { int 1 __var_args __var_args expr_size_ind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4530
expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4531
expr ->s19_m_kind ? 600 43 + == || { expr ->s19_m_kind ? 600 45 + == } && { expr ->s19_m_children 0 4 * + ? expr_is_pointer_size_gt_1 () } if
{
# tcc_cc.c 4533
fcode ? "%d * " { int 1 __var_args __var_args expr ->s19_m_children 0 4 * + ->s19_m_type ->s18_m_members ? 0 4 * + ->s18_m_size ? = ; __var_args fprintf () } ;
}
# tcc_cc.c 4534
expr ->s19_m_kind ? do
{
$ 660 == if
{
;
# tcc_cc.c 4536
fcode ? "<<" 0 fprintf () ;
# tcc_cc.c 4536
break
# tcc_cc.c 4537
}
$ 662 == if
{
;
# tcc_cc.c 4537
fcode ? ">>" 0 fprintf () ;
# tcc_cc.c 4537
break
# tcc_cc.c 4538
}
0 if
{
:_default_case_4
# tcc_cc.c 4538
fcode ? "%c" { int 1 __var_args __var_args expr ->s19_m_kind ? 600 - = ; __var_args fprintf () } ;
# tcc_cc.c 4538
break
# tcc_cc.c 4539
}
; goto _default_case_4
}
# tcc_cc.c 4540
expr ->s19_m_kind ? 600 47 + == || { expr ->s19_m_kind ? 600 37 + == } && { expr ->s19_m_children 0 4 * + ->s19_m_type ? type_is_signed_integer () || { expr ->s19_m_children 1 4 * + ->s19_m_type ? type_is_signed_integer () } } if
{
# tcc_cc.c 4543
fcode ? "s" 0 fprintf () ;
}
# tcc_cc.c 4544
fcode ? " =%s " { int 1 __var_args __var_args expr_size_ind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4545
break
# tcc_cc.c 4546
}
$ 507 == if
{
;
# tcc_cc.c 4547
expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4548
expr ->s19_m_children 0 4 * + ? is_lvalue () if
{
# tcc_cc.c 4549
fcode ? "->s%d_m_%s " { int 2 __var_args __var_args expr ->s19_m_int_val ? = ; __var_args 4 + expr ->s19_m_str_val ? = ; __var_args fprintf () } ;
}
else
{
# tcc_cc.c 4551
fcode ? "s%d_m_%s + " { int 2 __var_args __var_args expr ->s19_m_int_val ? = ; __var_args 4 + expr ->s19_m_str_val ? = ; __var_args fprintf () } ;
}
# tcc_cc.c 4552
break
# tcc_cc.c 4553
}
$ 46 == if
{
;
# tcc_cc.c 4554
expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4555
fcode ? "s%d_m_%s + " { int 2 __var_args __var_args expr ->s19_m_int_val ? = ; __var_args 4 + expr ->s19_m_str_val ? = ; __var_args fprintf () } ;
# tcc_cc.c 4556
break
# tcc_cc.c 4557
}
$ 91 == if
{
;
# tcc_cc.c 4558
expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4559
expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4560
{
int elem_size elem_size expr ->s19_m_type ? array_element_size () = ;
# tcc_cc.c 4562
elem_size ? 1 >s if
{
# tcc_cc.c 4563
fcode ? "%d * " { int 1 __var_args __var_args elem_size ? = ; __var_args fprintf () } ;
}
}
# tcc_cc.c 4565
fcode ? "+ " 0 fprintf () ;
# tcc_cc.c 4566
break
# tcc_cc.c 4567
}
$ 40 == if
{
;
# tcc_cc.c 4568
expr ->s19_m_children 0 4 * + ->s19_m_kind ? 105 == && { expr ->s19_m_children 0 4 * + ->s19_m_str_val ? "va_start" strcmp () 0 == } && { expr ->s19_m_nr_children ? 1 >s } && { expr ->s19_m_children 1 4 * + ->s19_m_kind ? 105 == } if
{
# tcc_cc.c 4570
# tcc_cc.c 4571
fcode ? "%s __var_args ? = " { int 1 __var_args __var_args expr ->s19_m_children 1 4 * + ->s19_m_str_val ? = ; __var_args fprintf () } ;
}
else
{
# tcc_cc.c 4574
int func_type func_type expr ->s19_m_children 0 4 * + ->s19_m_type ? = ;
int nr_decls nr_decls func_type ->s18_m_nr_decls ? = ;
int close_bracket close_bracket 0 =1 ;
# tcc_cc.c 4578
nr_decls ? 0 >s && { func_type ->s18_m_decls ? nr_decls ? 1 - 4 * + ? 0 == } if
{
# tcc_cc.c 4579
# tcc_cc.c 4580
{
int i i 1 = ;
do
{
i ? nr_decls ? <s ! if { break }
# tcc_cc.c 4581
expr ->s19_m_children i ? 4 * + ? 1 gen_expr () ;
i $ ? 1 + = 1 - ;
}
}
int nr_var_args nr_var_args expr ->s19_m_nr_children ? nr_decls ? - = ;
# tcc_cc.c 4583
nr_var_args ? 0 == if
{
# tcc_cc.c 4584
fcode ? "0 " 0 fprintf () ;
}
else
{
# tcc_cc.c 4586
# tcc_cc.c 4587
fcode ? "{ int %d __var_args " { int 1 __var_args __var_args nr_var_args ? = ; __var_args fprintf () } ;
# tcc_cc.c 4588
{
int i i 0 = ;
do
{
i ? nr_var_args ? <s ! if { break }
# tcc_cc.c 4589
# tcc_cc.c 4590
fcode ? "__var_args " 0 fprintf () ;
# tcc_cc.c 4591
i ? 0 >s if
{
# tcc_cc.c 4592
fcode ? "%d + " { int 1 __var_args __var_args i ? 4 * = ; __var_args fprintf () } ;
}
# tcc_cc.c 4593
expr ->s19_m_children nr_decls ? i ? + 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4594
fcode ? "= ; " 0 fprintf () ;
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4596
fcode ? "__var_args " 0 fprintf () ;
# tcc_cc.c 4597
close_bracket 1 =1 ;
}
}
else
{
# tcc_cc.c 4601
# tcc_cc.c 4602
{
int i i 1 = ;
do
{
i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4603
expr ->s19_m_children i ? 4 * + ? 1 gen_expr () ;
i $ ? 1 + = 1 - ;
}
}
}
# tcc_cc.c 4605
expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4606
expr ->s19_m_children 0 4 * + ->s19_m_type ->s18_m_kind ? TYPE_KIND_POINTER ? == if
{
# tcc_cc.c 4607
fcode ? "? " 0 fprintf () ;
}
# tcc_cc.c 4608
fcode ? "() " 0 fprintf () ;
# tcc_cc.c 4609
close_bracket ?1 char if
{
# tcc_cc.c 4610
fcode ? "} " 0 fprintf () ;
}
}
# tcc_cc.c 4612
break
# tcc_cc.c 4613
}
$ 2000 == if
{
;
# tcc_cc.c 4614
{
# tcc_cc.c 4615
multiple ?1 char if
{
# tcc_cc.c 4616
expr ? "multiple post increment" expr_print_error () ;
}
# tcc_cc.c 4617
expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
int size size expr ->s19_m_children 0 4 * + ? expr_inc_dec_value () = ;
# tcc_cc.c 4619
fcode ? "$ ?%s %d + =%s %d - " { int 4 __var_args __var_args expr_size_ind ? = ; __var_args 4 + size ? = ; __var_args 8 + expr_size_ind ? = ; __var_args 12 + size ? = ; __var_args fprintf () } ;
# tcc_cc.c 4620
break
}
# tcc_cc.c 4622
goto _fall_through_case_2
}
$ 2001 == if
{
;
:_fall_through_case_2
# tcc_cc.c 4623
{
# tcc_cc.c 4624
multiple ?1 char if
{
# tcc_cc.c 4625
expr ? "multiple post decrement" expr_print_error () ;
}
# tcc_cc.c 4626
expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
int size size expr ->s19_m_children 0 4 * + ? expr_inc_dec_value () = ;
# tcc_cc.c 4628
fcode ? "$ ?%s %d - =%s %d + " { int 4 __var_args __var_args expr_size_ind ? = ; __var_args 4 + size ? = ; __var_args 8 + expr_size_ind ? = ; __var_args 12 + size ? = ; __var_args fprintf () } ;
# tcc_cc.c 4629
break
}
# tcc_cc.c 4631
goto _fall_through_case_3
}
$ 2002 == if
{
;
:_fall_through_case_3
# tcc_cc.c 4632
multiple ?1 char if
{
# tcc_cc.c 4633
expr ? "multiple pre increment" expr_print_error () ;
}
# tcc_cc.c 4634
expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4635
fcode ? "$ ?%s %d + =%s " { int 3 __var_args __var_args expr_size_ind ? = ; __var_args 4 + expr ->s19_m_children 0 4 * + ? expr_inc_dec_value () = ; __var_args 8 + expr_size_ind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4636
break
# tcc_cc.c 4637
}
$ 2003 == if
{
;
# tcc_cc.c 4638
multiple ?1 char if
{
# tcc_cc.c 4639
expr ? "multiple pre decrement" expr_print_error () ;
}
# tcc_cc.c 4640
expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4641
fcode ? "$ ?%s %d - =%s " { int 3 __var_args __var_args expr_size_ind ? = ; __var_args 4 + expr ->s19_m_children 0 4 * + ? expr_inc_dec_value () = ; __var_args 8 + expr_size_ind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4642
break
# tcc_cc.c 4643
}
$ 2005 == if
{
;
# tcc_cc.c 4644
fcode ? "0 " 0 fprintf () ;
# tcc_cc.c 4645
expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4646
fcode ? "- " 0 fprintf () ;
# tcc_cc.c 4647
break
# tcc_cc.c 4648
}
$ 2006 == if
{
;
# tcc_cc.c 4649
expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4650
break
# tcc_cc.c 4651
}
$ 2007 == if
{
;
# tcc_cc.c 4652
expr ->s19_m_children 0 4 * + ? 0 gen_expr () ;
# tcc_cc.c 4653
break
# tcc_cc.c 4654
}
$ 924 == if
{
;
# tcc_cc.c 4655
expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4656
fcode ? "|| { " 0 fprintf () ;
# tcc_cc.c 4657
expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4658
fcode ? "} " 0 fprintf () ;
# tcc_cc.c 4659
break
# tcc_cc.c 4660
}
$ 838 == if
{
;
# tcc_cc.c 4661
expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4662
fcode ? "&& { " 0 fprintf () ;
# tcc_cc.c 4663
expr ->s19_m_children 1 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4664
fcode ? "} " 0 fprintf () ;
# tcc_cc.c 4665
break
# tcc_cc.c 4666
}
$ 63 == if
{
;
# tcc_cc.c 4667
expr ->s19_m_children 0 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4668
fcode ? "if { " 0 fprintf () ;
# tcc_cc.c 4669
expr ->s19_m_children 1 4 * + ? as_value ?1 char gen_expr () ;
# tcc_cc.c 4670
fcode ? "} else { " 0 fprintf () ;
# tcc_cc.c 4671
expr ->s19_m_children 2 4 * + ? as_value ?1 char gen_expr () ;
# tcc_cc.c 4672
fcode ? "} " 0 fprintf () ;
# tcc_cc.c 4673
break
# tcc_cc.c 4674
}
$ 108 == if
{
;
# tcc_cc.c 4675
{
int i i 0 = ;
do
{
i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4676
# tcc_cc.c 4677
expr ->s19_m_children i ? 4 * + ? 1 gen_expr () ;
# tcc_cc.c 4678
i ? expr ->s19_m_nr_children ? 1 - <s if
{
# tcc_cc.c 4679
fcode ? "; " 0 fprintf () ;
}
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4681
break
# tcc_cc.c 4682
}
0 if
{
:_default_case_5
# tcc_cc.c 4683
expr ->s19_m_kind ? 32 >s && { expr ->s19_m_kind ? 127 <s } if
{
# tcc_cc.c 4684
"Warning: expr '%c' not implemented yet\n" { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args printf () } ;
}
else
{
# tcc_cc.c 4686
"Warning: expr %d not implemented yet\n" { int 1 __var_args __var_args expr ->s19_m_kind ? = ; __var_args printf () } ;
}
# tcc_cc.c 4687
fcode ? "$ " 0 fprintf () ;
# tcc_cc.c 4688
break
# tcc_cc.c 4689
}
; goto _default_case_5
}
# tcc_cc.c 4690
as_value ?1 char && { expr ? is_lvalue () } if
{
# tcc_cc.c 4691
# tcc_cc.c 4692
multiple ?1 char if
{
# tcc_cc.c 4693
expr ? "multiple get value" expr_print_error () ;
}
# tcc_cc.c 4694
fcode ? "?%s " { int 1 __var_args __var_args expr_size_ind ? = ; __var_args fprintf () } ;
# tcc_cc.c 4695
expr ->s19_m_type ? 0 != && { expr ->s19_m_type ->s18_m_base_type ? BT_S8 ? == } if
{
# tcc_cc.c 4696
fcode ? "char " 0 fprintf () ;
}
}
0 return
}
void gen_stat_expr
{
int expr expr =:
# tcc_cc.c 4702
expr ? 0 != if
{
# tcc_cc.c 4703
# tcc_cc.c 4704
gen_indent () ;
# tcc_cc.c 4705
expr ? 1 gen_expr () ;
# tcc_cc.c 4706
fcode ? ";" 0 fprintf () ;
# tcc_cc.c 4707
gen_newline () ;
}
0 return
}
void gen_initializer
{
int type type =:
int expr expr =:
# tcc_cc.c 4713
expr ->s19_m_kind ? 108 == if
{
# tcc_cc.c 4714
# tcc_cc.c 4715
type ->s18_m_kind ? TYPE_KIND_ARRAY ? == if
{
# tcc_cc.c 4716
# tcc_cc.c 4717
{
int i i 0 = ;
do
{
i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4718
# tcc_cc.c 4719
i ? 1 + expr ->s19_m_nr_children ? <s if
{
# tcc_cc.c 4720
fcode ? "$ " 0 fprintf () ;
}
# tcc_cc.c 4721
expr ->s19_m_children i ? 4 * + ? type ->s18_m_members ? 0 4 * + ? gen_initializer () ;
# tcc_cc.c 4722
i ? 1 + expr ->s19_m_nr_children ? <s if
{
# tcc_cc.c 4723
# tcc_cc.c 4724
gen_indent () ;
# tcc_cc.c 4725
fcode ? "%u + " { int 1 __var_args __var_args type ->s18_m_members ? 0 4 * + ? array_element_size () = ; __var_args fprintf () } ;
}
i $ ? 1 + = 1 - ;
}
}
}
else
{
# tcc_cc.c 4729
type ->s18_m_kind ? TYPE_KIND_STRUCT ? == if
{
# tcc_cc.c 4730
int pos pos 0 = ;
# tcc_cc.c 4732
{
int i i 0 = ;
do
{
i ? expr ->s19_m_nr_children ? <s ! if { break }
# tcc_cc.c 4733
# tcc_cc.c 4734
i ? 1 + expr ->s19_m_nr_children ? <s if
{
# tcc_cc.c 4735
fcode ? "$ " 0 fprintf () ;
}
# tcc_cc.c 4736
expr ->s19_m_children i ? 4 * + ? type ->s18_m_decls ? i ? 4 * + ->s20_m_type ? gen_initializer () ;
# tcc_cc.c 4737
i ? 1 + expr ->s19_m_nr_children ? <s if
{
# tcc_cc.c 4738
# tcc_cc.c 4739
gen_indent () ;
int pos_inc pos_inc type ->s18_m_decls ? i ? 1 + 4 * + ->s20_m_pos ? pos ? - = ;
# tcc_cc.c 4741
fcode ? "%u + " { int 1 __var_args __var_args pos_inc ? = ; __var_args fprintf () } ;
# tcc_cc.c 4742
pos $ ? pos_inc ? + = ;
}
i $ ? 1 + = 1 - ;
}
}
}
else
{
# tcc_cc.c 4747
stderr ? "%s Error: unfit type %d for initializer\n" { int 2 __var_args __var_args token_it_pos () = ; __var_args 4 + type ->s18_m_kind ? = ; __var_args fprintf () } ;
}
}
}
else
{
# tcc_cc.c 4750
# tcc_cc.c 4751
expr ? 1 gen_expr () ;
# tcc_cc.c 4752
expr ->s19_m_type ? type_char_ptr ? == && { type ->s18_m_kind ? TYPE_KIND_ARRAY ? == } if
{
# tcc_cc.c 4753
fcode ? "%d strncpy () ;\n" { int 1 __var_args __var_args type ->s18_m_size ? = ; __var_args fprintf () } ;
}
else
{
# tcc_cc.c 4755
fcode ? "=%s ;\n" { int 1 __var_args __var_args type ? 0 != && { type ->s18_m_size ? 1 == } if { "1" } else { "" } = ; __var_args fprintf () } ;
}
}
0 return
}
void gen_init_globals
{
# tcc_cc.c 4761
fcode ? "void __init_globals__\n{\n" 0 fprintf () ;
# tcc_cc.c 4762
indent $ ? 1 + = 1 - ;
int next next 0 = ;
# tcc_cc.c 4766
{
int decl decl cur_ident_decls ? = ;
do
{
decl ? 0 != ! if { break }
# tcc_cc.c 4767
int prev prev decl ->s20_m_prev ? = ;
# tcc_cc.c 4769
decl ->s20_m_prev next ? = ;
# tcc_cc.c 4770
next decl ? = ;
# tcc_cc.c 4771
decl prev ? = ;
}
}
# tcc_cc.c 4773
cur_ident_decls next ? = ;
# tcc_cc.c 4775
{
int decl decl cur_ident_decls ? = ;
do
{
decl ? 0 != ! if { break }
# tcc_cc.c 4776
decl ->s20_m_value ? 0 != if
{
# tcc_cc.c 4777
# tcc_cc.c 4778
gen_indent () ;
# tcc_cc.c 4779
fcode ? "%s " { int 1 __var_args __var_args decl ->s20_m_name ? = ; __var_args fprintf () } ;
# tcc_cc.c 4780
decl ->s20_m_value ? decl ->s20_m_type ? gen_initializer () ;
}
decl decl ->s20_m_prev ? = ;
}
}
# tcc_cc.c 4783
indent $ ? 1 - = 1 + ;
# tcc_cc.c 4784
fcode ? " 0 return\n}\n" 0 fprintf () ;
0 return
}
void __init_globals__ ;
void main
{
int argv argv =:
int argc argc =:
__init_globals__ ()
_sys_env argv ? argc ? 4 * 4 + + = ;
# tcc_cc.c 4791
include_path 100 malloc () = ;
# tcc_cc.c 4793
"__TCC_CC__" 1 get_env () ;
# tcc_cc.c 4794
define_base_types () ;
# tcc_cc.c 4795
add_predefined_types () ;
# tcc_cc.c 4797
fcode stdout ? = ;
int only_preprocess only_preprocess 0 =1 ;
# tcc_cc.c 4800
{
int i i 1 = ;
do
{
i ? argc ? <s ! if { break }
# tcc_cc.c 4801
argv ? i ? 4 * + ? "-E" strcmp () 0 == if
{
# tcc_cc.c 4802
only_preprocess 1 =1 ;
}
else
{
# tcc_cc.c 4803
argv ? i ? 4 * + ? "-T" strcmp () 0 == if
{
# tcc_cc.c 4804
add_tracing 1 =1 ;
}
else
{
# tcc_cc.c 4805
argv ? i ? 4 * + ? "-dp" strcmp () 0 == if
{
# tcc_cc.c 4806
opt_trace_parser 1 =1 ;
}
else
{
# tcc_cc.c 4807
argv ? i ? 4 * + ? "-D" strcmp () 0 == && { i ? 1 + argc ? <s } if
{
# tcc_cc.c 4808
# tcc_cc.c 4809
i $ ? 1 + = 1 - ;
int s s argv ? i ? 4 * + ? = ;
int 25 name
int j j 0 = ;
# tcc_cc.c 4813
{
do
{
s ? ?1 char 0 != && { s ? ?1 char 61 != } ! if { break }
# tcc_cc.c 4814
j ? 99 <s if
{
# tcc_cc.c 4815
name j $ ? 1 + = 1 - + s ? ?1 char =1 ;
}
s $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4816
name j ? + 0 =1 ;
int env env name 1 get_env () = ;
# tcc_cc.c 4818
s ? ?1 char 61 == if
{
# tcc_cc.c 4819
# tcc_cc.c 4820
s $ ? 1 + = 1 - ;
int 50 value
# tcc_cc.c 4822
j 0 = ;
# tcc_cc.c 4823
s ? ?1 char 34 == if
{
# tcc_cc.c 4824
# tcc_cc.c 4825
s $ ? 1 + = 1 - ;
# tcc_cc.c 4826
{
do
{
s ? ?1 char 34 != && { s ? ?1 char 0 != } ! if { break }
# tcc_cc.c 4827
j ? 199 <s if
{
# tcc_cc.c 4828
value j $ ? 1 + = 1 - + s ? ?1 char =1 ;
}
s $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4829
value j ? + 0 =1 ;
# tcc_cc.c 4830
env ->s14_m_tokens value new_str_token () = ;
}
else
{
# tcc_cc.c 4833
# tcc_cc.c 4834
{
do
{
48 s ? ?1 char <=s && { s ? ?1 char 57 <=s } ! if { break }
# tcc_cc.c 4835
j ? 199 <s if
{
# tcc_cc.c 4836
value j $ ? 1 + = 1 - + s ? ?1 char =1 ;
}
s $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4837
value j ? + 0 =1 ;
# tcc_cc.c 4838
env ->s14_m_tokens value new_int_token () = ;
}
}
}
else
{
# tcc_cc.c 4842
i ? 1 + argc ? <s && { argv ? i ? 4 * + ? "-o" strcmp () 0 == } if
{
# tcc_cc.c 4843
# tcc_cc.c 4844
fcode argv ? i $ ? 1 + = 4 * + ? "w" fopen () = ;
# tcc_cc.c 4845
fcode ? 0 == if
{
# tcc_cc.c 4846
# tcc_cc.c 4847
fcode ? "ERROR: Cannot open file '%s' for writing\n" { int 1 __var_args __var_args argv ? i ? 4 * + ? = ; __var_args fprintf () } ;
# tcc_cc.c 4848
1 return
}
}
else
{
# tcc_cc.c 4852
# tcc_cc.c 4853
argv ? i ? 4 * + ? only_preprocess ?1 char parse_file () ! if
{
# tcc_cc.c 4854
1 return
}
}
}
}
}
}
i $ ? 1 + = 1 - ;
}
}
# tcc_cc.c 4857
has_error ?1 char if
{
# tcc_cc.c 4858
4294967295 return
}
# tcc_cc.c 4860
only_preprocess ?1 char if
{
# tcc_cc.c 4861
0 return
}
# tcc_cc.c 4863
gen_init_globals () ;
# tcc_cc.c 4865
0 return
0 return
}
void __init_globals__
{
__sys_stdin $ 0 = ;
4 + 0 = ;
__sys_stdout $ 1 = ;
4 + 0 = ;
__sys_stderr $ 2 = ;
4 + 0 = ;
stdin __sys_stdin = ;
stdout __sys_stdout = ;
stderr __sys_stderr = ;
LINE_MACRO_OUTPUT_FORMAT_GCC 0 = ;
LINE_MACRO_OUTPUT_FORMAT_NONE 1 = ;
LINE_MACRO_OUTPUT_FORMAT_STD 2 = ;
LINE_MACRO_OUTPUT_FORMAT_P10 11 = ;
_sys_env 0 = ;
opt_trace_parser 0 =1 ;
environment 0 = ;
include_path 0 = ;
end_include_prefix 0 = ;
token_it 0 = ;
BT_VOID 0 = ;
BT_S8 7 = ;
BT_U8 5 = ;
BT_S16 11 = ;
BT_U16 9 = ;
BT_S32 15 = ;
BT_U32 13 = ;
BT_S64 19 = ;
BT_U64 17 = ;
BT_F 23 = ;
BT_DF 27 = ;
BT_JMP_BUF 28 = ;
BT_FILE 32 = ;
BT_TIME_T 36 = ;
TYPE_KIND_BASE 0 = ;
TYPE_KIND_STRUCT 1 = ;
TYPE_KIND_UNION 2 = ;
TYPE_KIND_POINTER 3 = ;
TYPE_KIND_ARRAY 4 = ;
TYPE_KIND_FUNCTION 5 = ;
base_type_void 0 = ;
base_type_S8 0 = ;
base_type_U8 0 = ;
base_type_S16 0 = ;
base_type_U16 0 = ;
base_type_S32 0 = ;
base_type_U32 0 = ;
base_type_S64 0 = ;
base_type_U64 0 = ;
base_type_float 0 = ;
base_type_double 0 = ;
base_type_jmp_buf 0 = ;
base_type_file 0 = ;
base_type_time_t 0 = ;
base_type_bool 0 = ;
type_char_ptr 0 = ;
DK_IDENT 0 = ;
DK_STRUCT 1 = ;
DK_UNION 2 = ;
DK_ENUM 3 = ;
ST_NONE 0 = ;
ST_STATIC 1 = ;
ST_TYPEDEF 2 = ;
ST_CONST 3 = ;
trace_decls 0 =1 ;
cur_ident_decls 0 = ;
cur_decls 0 = ;
cur_labels 0 = ;
fcode 0 = ;
cur_struct_or_union 0 = ;
save_decl_depth 0 = ;
inside_function 0 =1 ;
inside_argument_list 0 =1 ;
add_tracing 0 =1 ;
default_case_nr 0 = ;
fall_through_case_nr 0 = ;
label_statement 0 =1 ;
indent 0 = ;
struct_union_nr 0 = ;
has_error 0 =1 ;
0 return
}
// Functions implemented in stack_c_intro.M1
int sys_int80(int a, int b, int c, int d); // https://faculty.nps.edu/cseagle/assembly/sys_call.html
void *sys_malloc(size_t size);
void exit(int result)
{
sys_int80(1, result, 0, 0);
}
#define NULL 0
typedef uint32_t off_t;
typedef uint32_t time_t;
typedef uint32_t suseconds_t;
typedef struct
{
uint32_t fh;
uint32_t at_eof;
} FILE;
FILE __sys_stdin = { 0, 0 };
FILE __sys_stdout = { 1, 0 };
FILE __sys_stderr = { 2, 0 };
const FILE *stdin = &__sys_stdin;
const FILE *stdout = &__sys_stdout;
const FILE *stderr = &__sys_stderr;
void *memcpy(void *dest, const void *src, size_t n)
{
char *d = (char *)dest;
char *s = (char *)src;
for (int i = 0; i < n; i++)
d[i] = s[i];
return dest;
}
void *memmove(void *dest, const void *src, size_t n)
{
char *d = (char *)dest;
char *s = (char *)src;
if (1) //dest < src)
{
for (size_t i = 0; i < n; i++)
d[i] = s[i];
}
else if (src < dest)
{
size_t j = n-1;
for (size_t i = 0; i < n; i++, j--)
d[j] = s[j];
}
return dest;
}
void *memset(void *s, int c, size_t n)
{
char *p = s
for (size_t i = 0; i < n; i++)
p[i] = c;
return s;
}
int memcmp(const void *s1, const void *s2, size_t n)
{
char *p1 = (char*)s1;
char *p2 = (char*)s2;
for (size_t i = 0; i < n; i++, p1++, p2++)
{
int result = *(char*)p1 - *(char*)p2;
if (result != 0)
return result;
}
return 0;
}
size_t strlen(const char *s)
{
int len = 0;
for (; *s != '\0'; s++)
len++;
return len;
}
char *strcpy(char *dest, const char *src)
{
char *result = dest;
while (*src != '\0')
*dest++ = *src++;
*dest = '\0';
return result;
}
char *strncpy(char *dest, const char *src, size_t n)
{
char *d = (char *)dest;
char *s = (char *)src;
for (int i = 0; i < n; i++)
{
d[i] = s[i];
if (s[i] == '\0')
break;
}
return dest;
}
char *strcat(char *dest, const char *src)
{
strcpy(dest + strlen(dest), src);
return dest;
}
char *strchr(const char *s, int c)
{
for (; *s != '\0'; s++)
if (*s == c)
return s;
return c == '\0' ? s : NULL;
}
char *strrchr(const char *s, int c)
{
int n = strlen(s);
for (int i = n; i >= 0; i--)
if (s[i] == c)
return s + i;
return NULL;
}
int strcmp(const char *s1, const char *s2)
{
for (;;)
{
int result = *s1 - *s2;
if (result != 0 || *s1 == 0)
return result;
s1++;
s2++;
}
return 0; // should not get here
}
int strncmp(const char *s1, const char *s2, size_t n)
{
for (; n > 0; n--)
{
int result = *s1 - *s2;
if (result != 0 || *s1 == 0)
return result;
s1++;
s2++;
}
return 0;
}
char *strstr(const char *haystack, const char *needle)
{
int n = strlen(needle);
for (; *haystack != '\0'; haystack++)
if (strncmp(haystack, needle, n) == 0)
return haystack;
return NULL;
}
long strtoul(const char *nptr, char **endptr, int base)
{
if (base == 0)
{
base = 10;
if (*nptr == '0')
{
base = 8;
nptr++;
if (*nptr == 'x' || *nptr == 'X')
{
base = 16;
nptr++;
}
}
}
long result = 0;
char sub_10 = '0' + (base < 10 ? base : 10);
for (;; nptr++)
{
if ('0' <= *nptr && *nptr < sub_10)
result = base * result + *nptr - '0';
else if ('a' <= *nptr && *nptr < 'a' + base - 10)
result = base * result + *nptr - 'a' + 10;
else if ('A' <= *nptr && *nptr < 'A' + base - 10)
result = base * result + *nptr - 'A' + 10;
else
break;
}
if (endptr != NULL)
*endptr = nptr;
return result;
}
long strtol(const char *nptr, char **endptr, int base)
{
long sign = 1;
if (*nptr == '-')
{
sign = -1;
nptr++;
}
return sign * strtoul(nptr, endptr, base);
}
long strtoll(const char *nptr, char **endptr, int base)
{
return strtol(nptr, endptr, base);
}
long strtoull(const char *nptr, char **endptr, int base)
{
return strtoul(nptr, endptr, base);
}
float strtof(const char* str, char **endptr)
{
// TODO: implement float parsing to int?
*endptr = str;
return 0;
}
void *malloc(size_t size)
{
size = (size + 3) & ~3;
int *result = sys_malloc(size + 4);
*result = size;
result++;
return result;
}
void *realloc(void *ptr, size_t size)
{
int *result = malloc(size);
if (ptr != 0)
{
int *old_ptr = ptr;
int old_size = old_ptr[-1] / 4;
for (int i = 0; i < old_size; i++)
result[i] = old_ptr[i];
}
return result;
}
void *calloc(int N, int S)
{
int len = N * S;
char *r = (char*)malloc(len);
for (int i = 0; i < len; i++)
r[i] = '\0';
return r;
}
void free(void *ptr)
{
// Do freeing of memory
return 0
}
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
return sys_int80(4, stream->fh, ptr, size * nmemb);
}
int fputc(int c, FILE *stream)
{
return sys_int80(4, stream->fh, &c, 1);
}
int fputs(const char *s, FILE *stream)
{
return sys_int80(4, stream->fh, s, strlen(s));
}
typedef int *va_list;
int __sys_printf(FILE *stream, char *trg, int len, char *format, va_list args)
{
char buffer[20];
int l = 0;
char *s;
int cnt = 0;
char *org_format = format;
for (;;)
{
if (len == 0)
break;
if (l > 0)
{
if (stream != 0)
fputc(*s, stream);
else if (trg != 0)
*trg++ = *s;
s++;
l--;
cnt++;
if (len > 0)
len--;
}
if (l == 0)
{
if (*format == '\0')
break;
s = buffer;
l = 1;
if (*format == '%')
{
format++;
if (*format == '%')
buffer[0] = '%';
else
{
int modifier = 0;
int sign = 1;
if (*format == '-')
{
sign = -1;
format++;
}
while ('0' <= *format && *format <= '9')
{
modifier = 10 * modifier + *format - '0';
format++;
}
if (*format == 's')
{
s = (char*)*args++;
l = strlen(s);
}
else if (*format == 'd')
{
int v = *args;
int b = 20;
if (v == 0)
buffer[--b] = '0';
else
{
if (v < 0) v = -v;
for (; v > 0; v = v / 10)
buffer[--b] = '0' + v % 10;
if (*args < 0)
buffer[--b] = '-';
}
l = 20 - b;
if (modifier > 0)
{
if (modifier > l)
{
if (sign == -1)
{
for (int i = 20 - modifier; i < 20; i++)
buffer[i] = b < 20 ? buffer[b++] : ' ';
b = 20 - modifier;
}
else
for (; l < modifier; l++)
buffer[--b] = ' ';
}
l = modifier;
}
s = buffer + b;
args++;
}
else if (*format == 'u')
{
unsigned int v = *args++;
if (v == 0)
buffer[0] = '0';
else
{
l = 20;
for (; v > 0; v = v / 10)
buffer[--l] = '0' + v % 10;
s = buffer + l;
l = 20 - l;
}
}
else if (*format == 'x' || *format == 'p')
{
unsigned int v = *args++;
if (v == 0)
buffer[0] = '0';
else
{
l = 20;
for (; v != 0; v >>= 4)
buffer[--l] = ((v & 0xf) < 10 ? '0' : ('a' - 10)) + (v & 0xf);
s = buffer + l;
l = 20 - l;
}
}
else if (*format == 'c')
{
buffer[0] = *args++;
}
else
{
fputs("__sys_printf %", stderr);
fputc(*format, stderr);
fputs(" ", stderr);
fputs(org_format, stderr);
fputs("\n", stderr);
exit(1);
}
}
}
else
{
buffer[0] = *format;
s = buffer;
l = 1;
}
format++;
}
}
if (len != 0 && trg != 0)
*trg = '\0';
return cnt;
}
void va_start(va_list ap, ...);
void va_end(va_list ap) {}
int fprintf(FILE *stream, const char *format, ...)
{
va_list ap;
va_start(ap, format);
return __sys_printf(stream, 0, -1, format, ap);
}
int printf(const char *format, ...)
{
va_list ap;
va_start(ap, format);
return __sys_printf(stdout, 0, -1, format, ap);
}
int sprintf(char *str, const char *format, ...)
{
va_list ap;
va_start(ap, format);
return __sys_printf(0, str, -1, format, ap);
}
int snprintf(char *str, size_t size, const char *format, ...)
{
va_list ap;
va_start(ap, format);
return __sys_printf(0, str, size, format, ap);
}
int vsnprintf(char *str, size_t size, const char *format, va_list ap)
{
return __sys_printf(0, str, size, format, ap);
}
#define O_RDONLY 0
#define O_WRONLY 1
#define O_RDWR 2
#define O_CREAT 00100
#define O_TRUNC 001000
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
int open(const char *filename, int flag, ...)
{
int mode = 0;
if ((flag & O_WRONLY) != 0)
{
va_list ap;
va_start(ap, flag);
mode = ap[0];
}
return sys_int80(5, filename, flag, mode);
}
int close(int fd)
{
return sys_int80(6, fd, 0, 0);
}
size_t read(int fd, void *buf, size_t count)
{
return sys_int80(3, fd, buf, count);
}
off_t lseek(int fd, off_t offset, int whence)
{
return sys_int80(19, fd, offset, whence);
}
FILE *fopen(const char *pathname, const char *mode)
{
char rw = *mode;
if (*mode == 'r' || *mode == 'w')
mode++;
int bin = 0;
if (*mode == 'b')
{
bin = 1;
mode++;
}
int plus = 0;
if (*mode == '+')
{
plus = 1;
mode++;
}
if (*mode != '\0')
{
printf("Mode %s should be 'r/w(b)(+)', 'w', or 'wb'\n", mode);
return 0;
}
int open_mode = rw == 'r'
? (plus == 1 ? O_RDWR : O_RDONLY)
: ((plus == 1 ? O_RDWR : O_WRONLY) | O_CREAT | O_TRUNC);
int fh = sys_int80(5, pathname, open_mode, 0777);
if (fh < 0)
{
printf("fopen %s %s returned %d\n", pathname, mode, fh);
return 0;
}
FILE *f = (FILE*)malloc(sizeof(FILE));
f->fh = fh;
f->at_eof = 0;
return f;
}
FILE *fdopen(int fd, const char *mode)
{
FILE *f = (FILE*)malloc(sizeof(FILE));
f->fh = fd;
f->at_eof = 0;
return f;
}
int fclose(FILE *stream)
{
return sys_int80(6, stream->fh, 0, 0);
}
int fflush(FILE *stream)
{
// (No buffered output)
return 0;
}
int fseek(FILE *stream, long offset, int whence)
{
return lseek(stream->fh, offset, whence);
}
long ftell(FILE *stream)
{
return lseek(stream->fh, 0, SEEK_CUR);
}
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
char *s = (char*)ptr;
for (int i = 0; i < nmemb; i++)
{
size_t r = read(stream->fh, s, size);
if (r < size)
return i;
s += size;
}
return nmemb;
}
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
off_t lseek(int fd, off_t offset, int whence)
{
return sys_int80(19, fd, offset, whence);
}
int feof(FILE *stream)
{
return stream->at_eof;
}
int fgetc(FILE *stream)
{
if (stream->at_eof)
return -1;
unsigned char ch;
int ret = sys_int80(3, stream->fh, &ch, 1);
if (ret <= 0)
{
stream->at_eof = 1;
return -1;
}
return ch;
}
double ldexp(double x, int exp)
{
double result = x;
for (int i = 1; i < exp; i++)
result *= x;
return result;
}
time_t time(time_t *tloc)
{
// TODO (function is used, but not called)
fprintf(stderr, "TODO time\n"); exit(1);
}
struct tm {
int tm_sec; /* Seconds (0-60) */
int tm_min; /* Minutes (0-59) */
int tm_hour; /* Hours (0-23) */
int tm_mday; /* Day of the month (1-31) */
int tm_mon; /* Month (0-11) */
int tm_year; /* Year - 1900 */
int tm_wday; /* Day of the week (0-6, Sunday = 0) */
int tm_yday; /* Day in the year (0-365, 1 Jan = 0) */
int tm_isdst; /* Daylight saving time */
};
struct tm *localtime(const time_t *timep)
{
// TODO (function is used, but not called)
fprintf(stderr, "TODO localtime\n"); exit(1);
}
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
struct timezone {
int tz_minuteswest; /* minutes west of Greenwich */
int tz_dsttime; /* type of DST correction */
};
int gettimeofday(struct timeval *tv, struct timezone *tz)
{
return 0;
}
int errno;
#define NULL 0
// This is a hack for an enum that is defined inside a struct
const int LINE_MACRO_OUTPUT_FORMAT_GCC = 0;
const int LINE_MACRO_OUTPUT_FORMAT_NONE = 1;
const int LINE_MACRO_OUTPUT_FORMAT_STD = 2;
const int LINE_MACRO_OUTPUT_FORMAT_P10 = 11;
// for tcc_cc.c
int write(int fd, char* buf, unsigned count)
{
return sys_int80(4, fd, buf, count);
}
int fileno(FILE *stream)
{
return stream->fh;
}
#define __LINE__ 0
#define __file__ ""
#define __func__ ""
char *getcwd(char *buf, size_t size)
{
sys_int80(183, buf, size, 0);
return buf;
}
char **_sys_env = 0;
char *getenv(const char *name)
{
int len = strlen(name);
for (char **env = _sys_env; *env != NULL; env++)
if (strncmp(*env, name, len) == 0 && (*env)[len] == '=')
return (*env) + len + 1;
}
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
{
// just implement a simple bubble sort
for (int go = 1; go == 1;)
{
go = 0;
for (int i = 0; i + 1 < nmemb; i++)
{
char *arg1 = (char*)base + i * size;
char *arg2 = (char*)base + (1 + i) * size;
int sign = compar(arg1, arg2);
if (sign > 0)
{
go = 1;
for (int j = 0; j < size; j++)
if (j + 3 < size)
{
//printf("(swap int %d %d %d)", j, *(int*)(arg1 + j), *(int*)(arg2 + j));;
int h = *(int*)(arg1 + j);
*(int*)(arg1 + j) = *(int*)(arg2 + j);
*(int*)(arg2 + j) = h;
j += 3;
}
else
{
//printf("(swap char %d)", j);
char h = ((char*)arg1)[j];
((char*)arg1)[j] = ((char*)arg2)[j];
((char*)arg2)[j] = h;
}
}
}
}
}
time_t time(time_t *tloc)
{
// TODO (function is used, but not called)
fprintf(stderr, "TODO time\n"); exit(1);
}
int setjmp(jmp_buf env)
{
// TODO (function is used, but not called)
fprintf(stderr, "TODO setjmp\n"); exit(1);
return 0;
}
void longjmp(jmp_buf env, int val)
{
// TODO (function is used, but not called)
fprintf(stderr, "TODO longjmp\n"); exit(0);
exit(-1);
}
int unlink(const char *pathname)
{
return sys_int80(10, pathname, 0, 0);
}
int sscanf(const char *str, const char *format, ...)
{
va_list ap;
va_start(ap, format);
int args_parsed = 0;
while (*format != '\0')
if (*str == '\0')
break;
else if (*format == '%')
{
format++;
if (*format == 'd')
{
format++;
int v = 0;
while ('0' <= *str && *str <= '9')
{
v = 10 * v + *str - '0';
str++;
}
**((int**)ap) = v;
ap++;
args_parsed++;
}
else
{
fprintf(stderr, "sscanf: format %%%c not supported\n", *format);
exit(1);
}
}
else
{
if (*format != *str)
break;
format++;
str++;
}
return args_parsed;
}
int atoi(const char *nptr)
{
// TODO (function is used, but not called)
fprintf(stderr, "TODO atoi\n"); exit(1);
}
int remove(const char *pathname)
{
return sys_int80(10, pathname, 0, 0);
}
int execvp(const char *file, char * argv[])
{
// TODO (function is used, but not called)
fprintf(stderr, "TODO execvp\n"); exit(1);
}
int mkdir(const char *pathname, int mode)
{
return sys_int80(39, pathname, mode, 0);
}
int chdir(const char *path)
{
sys_int80(12, path, 0, 0);
}
int access(const char *filename, int mode)
{
return sys_int80(33, filename, mode, 0);
}
int chmod(const char *filename, int mode)
{
return sys_int80(15, filename, mode, 0);
}
int symlink(const char *target, const char *linkpath)
{
return sys_int80(83, target, linkpath, 0);
}
struct utsname {
char sysname[]; /* Operating system name (e.g., "Linux") */
char nodename[]; /* Name within communications network
to which the node is attached, if any */
char release[]; /* Operating system release
(e.g., "2.6.28") */
char version[]; /* Operating system version */
char machine[]; /* Hardware type identifier */
#ifdef _GNU_SOURCE
char domainname[]; /* NIS or YP domain name */
#endif
};
int uname(struct utsname *buf)
{
return sys_int80(109, buf, 0, 0);
}
int execve(char *program, char **argv, char **env)
{
return sys_int80(11, program, argv, env);
}
char *fgets(char *str, int len, FILE *f)
{
if (feof(f))
return NULL;
for (int i = 0; i < len - 1; i++)
{
int ch = fgetc(f);
if (ch < 0)
{
str[i] = '\0';
break;
}
str[i] = ch;
if (ch == '\n')
{
str[i+1] = '\0';
break;
}
}
return str;
}
#define __linux__
#define EOF -1
#define EXIT_FAILURE -1
#define EXIT_SUCCESS 0
/* This file containst the following files from https://github.com/oriansj/mescc-tools/tree/master/Kaem:
* - kaem.h
* - bootstrappable.c (from https://github.com/oriansj/M2libc/)
* - kaem_globals.c
* - variable.c
* - kaem.c
*/
#ifdef __TCC_CC__
#define chdir(path) sys_int80(12, path, 0, 0)
#define fork() sys_int80(2, 0, 0, 0)
#define execve(program, argv, env) sys_int80(11, program, argv, env)
#define waitpid(f, status, mode) sys_int80(7, f, status, mode)
#endif
/* Copyright (C) 2016-2020 Jeremiah Orians
* Copyright (C) 2020 fosslinux
* This file is part of mescc-tools.
*
* mescc-tools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
/*
* DEFINES
*/
#define FALSE 0
#define TRUE 1
// CONSTANT SUCCESS 0
#define SUCCESS 0
// CONSTANT FAILURE 1
#define FAILURE 1
#define MAX_STRING 4096
#define MAX_ARRAY 300
/*
* Here is the token struct. It is used for both the token linked-list and
* env linked-list.
*/
struct Token
{
/*
* For the token linked-list, this stores the token; for the env linked-list
* this stores the value of the variable.
*/
char* value;
/*
* Used only for the env linked-list. It holds a string containing the
* name of the var.
*/
char* var;
/*
* This struct stores a node of a singly linked list, store the pointer to
* the next node.
*/
struct Token* next;
};
/* Copyright (C) 2016-2020 Jeremiah Orians
* Copyright (C) 2020 fosslinux
* This file is part of mescc-tools.
*
* mescc-tools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
*/
//#include "kaem.h"
int command_done;
int VERBOSE;
int VERBOSE_EXIT;
int STRICT;
int INIT_MODE;
int FUZZING;
int WARNINGS;
char* KAEM_BINARY;
char* PATH;
/* Token linked-list; stores the tokens of each line */
struct Token* token;
/* Env linked-list; stores the environment variables */
struct Token* env;
/* Alias linked-list; stores the aliases */
struct Token* alias;
/* Copyright (C) 2016 Jeremiah Orians
* This file is part of M2-Planet.
*
* M2-Planet is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* M2-Planet is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with M2-Planet. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
void require(int bool, char* error)
{
if(!bool)
{
fputs(error, stderr);
exit(EXIT_FAILURE);
}
}
int match(char* a, char* b)
{
if((NULL == a) && (NULL == b)) return TRUE;
if(NULL == a) return FALSE;
if(NULL == b) return FALSE;
int i = -1;
do
{
i = i + 1;
if(a[i] != b[i])
{
return FALSE;
}
} while((0 != a[i]) && (0 !=b[i]));
return TRUE;
}
int in_set(int c, char* s)
{
/* NULL set is always false */
if(NULL == s) return FALSE;
while(0 != s[0])
{
if(c == s[0]) return TRUE;
s = s + 1;
}
return FALSE;
}
/* INTERNAL ONLY */
int __index_number(char* s, char c)
{
int i = 0;
while(s[i] != c)
{
i = i + 1;
if(0 == s[i]) return -1;
}
return i;
}
/* INTERNAL ONLY */
int __toupper(int c)
{
if(in_set(c, "abcdefghijklmnopqrstuvwxyz")) return (c & 0xDF);
return c;
}
/* INTERNAL ONLY */
int __set_reader(char* set, int mult, char* input)
{
int n = 0;
int i = 0;
int hold;
int negative_p = FALSE;
if(input[0] == '-')
{
negative_p = TRUE;
i = i + 1;
}
while(in_set(input[i], set))
{
if('_' == input[i])
{
i = i + 1;
continue;
}
n = n * mult;
hold = __index_number(set, __toupper(input[i]));
/* Input managed to change between in_set and index_number */
if(-1 == hold) return 0;
n = n + hold;
i = i + 1;
}
/* loop exited before NULL and thus invalid input */
if(0 != input[i]) return 0;
if(negative_p)
{
n = 0 - n;
}
return n;
}
int strtoint(char *a)
{
int result = 0;
/* If NULL string */
if(0 == a[0])
{
result = 0;
}
/* Deal with binary */
else if ('0' == a[0] && 'b' == a[1])
{
result = __set_reader("01_", 2, a+2);
}
/* Deal with hex */
else if ('0' == a[0] && 'x' == a[1])
{
result = __set_reader("0123456789ABCDEFabcdef_", 16, a+2);
}
/* Deal with octal */
else if('0' == a[0])
{
result = __set_reader("01234567_", 8, a+1);
}
/* Deal with decimal */
else
{
result = __set_reader("0123456789_", 10, a);
}
/* Deal with sign extension for 64bit hosts */
if(0 != (0x80000000 & result)) result = (0xFFFFFFFF << 31) | result;
return result;
}
char* int2str(int x, int base, int signed_p)
{
require(1 < base, "int2str doesn't support a base less than 2\n");
require(37 > base, "int2str doesn't support a base more than 36\n");
/* Be overly conservative and save space for 32binary digits and padding null */
char* p = calloc(34, sizeof(char));
/* if calloc fails return null to let calling code deal with it */
if(NULL == p) return p;
p = p + 32;
unsigned i;
int sign_p = FALSE;
char* table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if(signed_p && (10 == base) && (0 != (x & 0x80000000)))
{
/* Truncate to 31bits */
i = -x & 0x7FFFFFFF;
if(0 == i) return "-2147483648";
sign_p = TRUE;
} /* Truncate to 32bits */
else i = x & (0x7FFFFFFF + 0x80000000); /* M2-Planet/cc_* can't handle large signed numbers in literals */
do
{
p[0] = table[i % base];
p = p - 1;
i = i / base;
} while(0 < i);
if(sign_p)
{
p[0] = '-';
p = p - 1;
}
return p + 1;
}
/*
* Copyright (C) 2020 fosslinux
* This file is part of mescc-tools.
*
* mescc-tools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
//#include "kaem.h"
/* Prototypes from other files */
int array_length(char** array);
char* env_lookup(char* variable);
/*
* VARIABLE HANDLING FUNCTIONS
*/
/* Substitute a variable into n->value */
int run_substitution(char* var_name, struct Token* n)
{
char* value = env_lookup(var_name);
/* If there is nothing to substitute, don't substitute anything! */
if(value != NULL)
{
char* s = calloc(MAX_STRING, sizeof(char));
s = strcat(s, n->value);
s = strcat(s, value);
n->value = s;
return TRUE;
}
return FALSE;
}
/* Handle ${var:-text} format of variables - i.e. ifset format */
int variable_substitute_ifset(char* input, struct Token* n, int index)
{
/*
* In ${var:-text} format, we evaluate like follows.
* If var is set as an envar, then we substitute the contents of that
* envar. If it is not set, we substitute alternative text.
*
* In this function, we assume that input is the raw token,
* n->value is everything already done in variable_substitute,
* index is where we are up to in input. offset is for n->value.
*/
/*
* Check if we should even be performing this function.
* We perform this function when we come across ${var:-text} syntax.
*/
int index_old = index;
int perform = FALSE;
int input_length = strlen(input);
while(index < input_length)
{ /* Loop over each character */
if(input[index] == ':' && input[index + 1] == '-')
{ /* Yes, this is (most likely) ${var:-text} format. */
perform = TRUE;
break;
}
index = index + 1;
}
/* Don't perform it if we shouldn't */
if(perform == FALSE) return index_old;
index = index_old;
/*
* Get offset.
* offset is the difference between the index of the variable we write to
* in the following blocks and input.
* This stays relatively constant.
*/
int offset = index;
/* Get the variable name */
char* var_name = calloc(MAX_STRING, sizeof(char));
require(var_name != NULL, "Memory initialization of var_name in variable_substitute_ifset failed\n");
while(input[index] != ':')
{ /* Copy into var_name until :- */
var_name[index - offset] = input[index];
index = index + 1;
}
/* Skip over :- */
index = index + 2;
offset = index;
/* Get the alternative text */
char* text = calloc(MAX_STRING, sizeof(char));
require(text != NULL, "Memory initialization of text in variable_substitute_ifset failed\n");
while(input[index] != '}')
{ /* Copy into text until } */
require(input_length > index, "IMPROPERLY TERMINATED VARIABLE\nABORTING HARD\n");
text[index - offset] = input[index];
index = index + 1;
}
/* Do the substitution */
if(run_substitution(var_name, n) == FALSE)
{ /* The variable was not found. Substitute the alternative text. */
char* s = calloc(MAX_STRING, sizeof(char));
s = strcat(s, n->value);
s = strcat(s, text);
n->value = s;
}
return index;
}
/* Controls substitution for ${variable} and derivatives */
int variable_substitute(char* input, struct Token* n, int index)
{
/* NOTE: index is the pos of input */
index = index + 1; /* We don't want the { */
/*
* Check for "special" types
* If we do find a special type we delegate the substitution to it
* and return here; as we are done... there's nothing more do do in
* that case.
*/
int index_old = index;
index = variable_substitute_ifset(input, n, index);
if(index != index_old) return index;
/* Reset index */
index = index_old;
/*
* If we reach here it is a normal substitution
* Let's do it!
*/
/* Initialize var_name and offset */
char* var_name = calloc(MAX_STRING, sizeof(char));
require(var_name != NULL, "Memory initialization of var_name in variable_substitute failed\n");
int offset = index;
/* Get the variable name */
int substitute_done = FALSE;
char c;
while(substitute_done == FALSE)
{
c = input[index];
require(MAX_STRING > index, "LINE IS TOO LONG\nABORTING HARD\n");
if(EOF == c || '\n' == c || index > strlen(input))
{ /* We never should hit EOF, EOL or run past the end of the line
while collecting a variable */
fputs("IMPROPERLY TERMINATED VARIABLE!\nABORTING HARD\n", stderr);
exit(EXIT_FAILURE);
}
else if('\\' == c)
{ /* Drop the \ - poor mans escaping. */
index = index + 1;
}
else if('}' == c)
{ /* End of variable name */
substitute_done = TRUE;
}
else
{
var_name[index - offset] = c;
index = index + 1;
}
}
/* Substitute the variable */
run_substitution(var_name, n);
return index;
}
/* Function to concatenate all command line arguments */
void variable_all(char** argv, struct Token* n)
{
fflush(stdout);
/* index refernences the index of n->value, unlike other functions */
int index = 0;
int argv_length = array_length(argv);
int i = 0;
char* argv_element = calloc(MAX_STRING, sizeof(char));
char* hold = argv[i];
n->value = argv_element;
/* Assuming the form kaem -f script or kaem -f script -- 123 we want matching results to bash, so skip the kaem, -f and script */
while(!match("--", hold))
{
i = i + 1;
hold = argv[i];
if(argv_length == i) break;
}
/* put i = i + 1 in the for initialization to skip past the -- */
for(; i < argv_length; i = i + 1)
{
/* Ends up with (n->value) (argv[i]) */
/* If we don't do this we get jumbled results in M2-Planet */
hold = argv[i];
strcpy(argv_element + index, hold);
index = index + strlen(hold);
/* Add space on the end */
n->value[index] = ' ';
index = index + 1;
}
/* Remove trailing space */
index = index - 1;
n->value[index] = 0;
}
/* Function controlling substitution of variables */
void handle_variables(char** argv, struct Token* n)
{
/* NOTE: index is the position of input */
int index = 0;
/* Create input */
char* input = calloc(MAX_STRING, sizeof(char));
require(input != NULL, "Memory initialization of input in collect_variable failed\n");
strcpy(input, n->value);
/* Reset n->value */
n->value = calloc(MAX_STRING, sizeof(char));
require(n->value != NULL, "Memory initialization of n->value in collect_variable failed\n");
/* Copy everything up to the $ */
/*
* TODO: Not need allocation of input before this check if there is no
* variable in it.
*/
while(input[index] != '$')
{
if(input[index] == 0)
{ /* No variable in it */
n->value = input;
return; /* We don't need to do anything more */
}
n->value[index] = input[index];
index = index + 1;
}
/* Must be outside the loop */
int offset;
substitute:
index = index + 1; /* We are uninterested in the $ */
/* Run the substitution */
if(input[index] == '{')
{ /* Handle everything ${ related */
index = variable_substitute(input, n, index);
index = index + 1; /* We don't want the closing } */
}
else if(input[index] == '@')
{ /* Handles $@ */
index = index + 1; /* We don't want the @ */
variable_all(argv, n);
}
else
{ /* We don't know that */
fputs("IMPROPERLY USED VARIABLE!\nOnly ${foo} and $@ format are accepted at this time.\nABORTING HARD\n", stderr);
exit(EXIT_FAILURE);
}
offset = strlen(n->value) - index;
/* Copy everything from the end of the variable to the end of the token */
while(input[index] != 0)
{
if(input[index] == '$')
{ /* We have found another variable */
fflush(stdout);
goto substitute;
}
n->value[index + offset] = input[index];
index = index + 1;
}
}
/* Copyright (C) 2016-2020 Jeremiah Orians
* Copyright (C) 2020 fosslinux
* Copyright (C) 2021 Andrius Å tikonas
* This file is part of mescc-tools.
*
* mescc-tools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
//#include "kaem.h"
/* Prototypes from other files */
void handle_variables(char** argv, struct Token* n);
/*
* UTILITY FUNCTIONS
*/
/* Function to find a character in a string */
char* find_char(char* string, char a)
{
if(0 == string[0])
{
return NULL;
}
while(a != string[0])
{
string = string + 1;
if(0 == string[0])
{
return string;
}
}
return string;
}
/* Function to find the length of a char**; an array of strings */
int array_length(char** array)
{
int length = 0;
while(array[length] != NULL)
{
length = length + 1;
}
return length;
}
/* Search for a variable in the token linked-list */
char* token_lookup(char* variable, struct Token* token)
{
/* Start at the head */
struct Token* n = token;
/* Loop over the linked-list */
while(n != NULL)
{
if(match(variable, n->var))
{
/* We have found the correct node */
return n->value; /* Done */
}
/* Nope, try the next */
n = n->next;
}
/* We didn't find anything! */
return NULL;
}
/* Search for a variable in the env linked-list */
char* env_lookup(char* variable)
{
return token_lookup(variable, env);
}
/* Search for a variable in the alias linked-list */
char* alias_lookup(char* variable)
{
return token_lookup(variable, alias);
}
/* Find the full path to an executable */
char* find_executable(char* name)
{
if(match("", name))
{
return NULL;
}
if(('.' == name[0]) || ('/' == name[0]))
{
/* assume names that start with . or / are relative or absolute */
return name;
}
char* trial = calloc(MAX_STRING, sizeof(char));
char* MPATH = calloc(MAX_STRING, sizeof(char)); /* Modified PATH */
require(MPATH != NULL, "Memory initialization of MPATH in find_executable failed\n");
strcpy(MPATH, PATH);
FILE* t;
char* next = find_char(MPATH, ':');
int index;
int offset;
int mpath_length;
int name_length;
int trial_length;
while(NULL != next)
{
/* Reset trial */
trial_length = strlen(trial);
for(index = 0; index < trial_length; index = index + 1)
{
trial[index] = 0;
}
next[0] = 0;
/* prepend_string(MPATH, prepend_string("/", name)) */
mpath_length = strlen(MPATH);
for(index = 0; index < mpath_length; index = index + 1)
{
require(MAX_STRING > index, "Element of PATH is too long\n");
trial[index] = MPATH[index];
}
trial[index] = '/';
offset = strlen(trial);
name_length = strlen(name);
for(index = 0; index < name_length; index = index + 1)
{
require(MAX_STRING > index, "Element of PATH is too long\n");
trial[index + offset] = name[index];
}
/* Try the trial */
require(strlen(trial) < MAX_STRING, "COMMAND TOO LONG!\nABORTING HARD\n");
t = fopen(trial, "r");
if(NULL != t)
{
fclose(t);
return trial;
}
MPATH = next + 1;
next = find_char(MPATH, ':');
}
return NULL;
}
/* Function to convert a Token linked-list into an array of strings */
char** list_to_array(struct Token* s)
{
struct Token* n;
n = s;
char** array = calloc(MAX_ARRAY, sizeof(char*));
require(array != NULL, "Memory initialization of array in conversion of list to array failed\n");
char* element = calloc(MAX_STRING, sizeof(char));
require(element != NULL, "Memory initialization of element in conversion of list to array failed\n");
int index = 0;
int i;
int value_length;
int var_length;
int offset;
while(n != NULL)
{
/* Loop through each node and assign it to an array index */
array[index] = calloc(MAX_STRING, sizeof(char));
require(array[index] != NULL, "Memory initialization of array[index] in conversion of list to array failed\n");
/* Bounds checking */
/* No easy way to tell which it is, output generic message */
require(index < MAX_ARRAY, "SCRIPT TOO LONG or TOO MANY ENVARS\nABORTING HARD\n");
if(n->var == NULL)
{
/* It is a line */
array[index] = n->value;
}
else
{
/* It is a var */
/* prepend_string(n->var, prepend_string("=", n->value)) */
var_length = strlen(n->var);
for(i = 0; i < var_length; i = i + 1)
{
element[i] = n->var[i];
}
element[i] = '=';
i = i + 1;
offset = i;
value_length = strlen(n->value);
for(i = 0; i < value_length; i = i + 1)
{
element[i + offset] = n->value[i];
}
}
/* Insert elements if not empty */
if(!match("", element))
{
strcpy(array[index], element);
}
n = n->next;
index = index + 1;
/* Reset element */
for(i = 0; i < MAX_STRING; i = i + 1)
{
element[i] = 0;
}
}
return array;
}
/* Function to handle the correct options for escapes */
int handle_escape(int c)
{
if(c == '\n')
{
/* Do nothing - eat up the newline */
return -1;
}
else if('n' == c)
{
/* Add a newline to the token */
return '\n';
}
else if('r' == c)
{
/* Add a return to the token */
return '\r';
}
else if('\\' == c)
{
/* Add a real backslash to the token */
return '\\';
}
else
{
/* Just add it to the token (eg, quotes) */
return c;
}
}
/*
* TOKEN COLLECTION FUNCTIONS
*/
/* Function for skipping over line comments */
void collect_comment(FILE* input)
{
int c;
/* Eat up the comment, one character at a time */
/*
* Sanity check that the comment ends with \n.
* Remove the comment from the FILE*
*/
do
{
c = fgetc(input);
/* We reached an EOF!! */
require(EOF != c, "IMPROPERLY TERMINATED LINE COMMENT!\nABORTING HARD\n");
} while('\n' != c); /* We can now be sure it ended with \n -- and have purged the comment */
}
/* Function for collecting strings and removing the "" pair that goes with them */
int collect_string(FILE* input, char* n, int index)
{
int string_done = FALSE;
int c;
do
{
/* Bounds check */
require(MAX_STRING > index, "LINE IS TOO LONG\nABORTING HARD\n");
c = fgetc(input);
require(EOF != c, "IMPROPERLY TERMINATED STRING!\nABORTING HARD\n");
if('\\' == c)
{
/* We are escaping the next character */
/* This correctly handles escaped quotes as it just returns the quote */
c = fgetc(input);
c = handle_escape(c);
n[index] = c;
index = index + 1;
}
else if('"' == c)
{
/* End of string */
string_done = TRUE;
}
else
{
n[index] = c;
index = index + 1;
}
} while(string_done == FALSE);
return index;
}
/* Function to parse and assign token->value */
int collect_token(FILE* input, char* n, int last_index)
{
int c;
int cc;
int token_done = FALSE;
int index = 0;
do
{
/* Loop over each character in the token */
c = fgetc(input);
/* Bounds checking */
require(MAX_STRING > index, "LINE IS TOO LONG\nABORTING HARD\n");
if(EOF == c)
{
/* End of file -- this means script complete */
/* We don't actually exit here. This logically makes more sense;
* let the code follow its natural path of execution and exit
* sucessfuly at the end of main().
*/
token_done = TRUE;
command_done = TRUE;
return -1;
}
else if((' ' == c) || ('\t' == c))
{
/* Space and tab are token separators */
token_done = TRUE;
}
else if(('\n' == c) || (';' == c))
{
/* Command terminates at the end of a line or at semicolon */
command_done = TRUE;
token_done = TRUE;
if(0 == index)
{
index = last_index;
}
}
else if('"' == c)
{
/* Handle strings -- everything between a pair of "" */
index = collect_string(input, n, index);
token_done = TRUE;
}
else if('#' == c)
{
/* Handle line comments */
collect_comment(input);
command_done = TRUE;
token_done = TRUE;
if(0 == index)
{
index = last_index;
}
}
else if('\\' == c)
{
/* Support for escapes */
c = fgetc(input); /* Skips over \, gets the next char */
cc = handle_escape(c);
if(-1 != cc)
{
/* We need to put it into the token */
n[index] = cc;
}
index = index + 1;
}
else if(0 == c)
{
/* We have come to the end of the token */
token_done = TRUE;
}
else
{
/* It's a character to assign */
n[index] = c;
index = index + 1;
}
} while(token_done == FALSE);
return index;
}
/* Function to parse string and assign token->value */
int collect_alias_token(char* input, char* n, int index)
{
int c;
int cc;
int token_done = FALSE;
int output_index = 0;
do
{
/* Loop over each character in the token */
c = input[index];
index = index + 1;
if((' ' == c) || ('\t' == c))
{
/* Space and tab are token separators */
token_done = TRUE;
}
else if('\\' == c)
{
/* Support for escapes */
c = input[index];
index = index + 1;
cc = handle_escape(c);
/* We need to put it into the token */
n[output_index] = cc;
output_index = output_index + 1;
}
else if(0 == c)
{
/* We have come to the end of the token */
token_done = TRUE;
index = 0;
}
else
{
/* It's a character to assign */
n[output_index] = c;
output_index = output_index + 1;
}
} while(token_done == FALSE);
return index;
}
/*
* EXECUTION FUNCTIONS
* Note: All of the builtins return SUCCESS (0) when they exit successfully
* and FAILURE (1) when they fail.
*/
/* Function to check if the token is an envar */
int is_envar(char* token)
{
int i = 0;
int token_length = strlen(token);
while(i < token_length)
{
if(token[i] == '=')
{
return FAILURE;
}
i = i + 1;
}
return SUCCESS;
}
/* Add an envar */
void add_envar(void)
{
/* Pointers to strings we want */
char* name = calloc(strlen(token->value) + 4, sizeof(char));
char* value = token->value;
char* newvalue;
int i = 0;
/* Isolate the name */
while('=' != value[i])
{
name[i] = value[i];
i = i + 1;
}
/* Isolate the value */
newvalue = name + i + 2;
value = value + i + 1;
i = 0;
require(0 != value[i], "add_envar received improper variable\n");
while(0 != value[i])
{
newvalue[i] = value[i];
i = i + 1;
}
/* If we are in init-mode and this is the first var env == NULL, rectify */
if(env == NULL)
{
env = calloc(1, sizeof(struct Token));
require(env != NULL, "Memory initialization of env failed\n");
env->var = name; /* Add our first variable */
}
/*
* If the name of the envar is PATH, then we need to set our (internal)
* global PATH value.
*/
if(match(name, "PATH"))
{
strcpy(PATH, newvalue);
}
struct Token* n = env;
/* Find match if possible */
while(!match(name, n->var))
{
if(NULL == n->next)
{
n->next = calloc(1, sizeof(struct Token));
require(n->next != NULL, "Memory initialization of next env node in add_envar failed\n");
n->next->var = name;
} /* Loop will match and exit */
n = n->next;
}
/* Since we found the variable we need only to set it to its new value */
n->value = newvalue;
}
/* Add an alias */
void add_alias(void)
{
token = token->next; /* Skip the actual alias */
if(token->next == NULL)
{
/* No arguments */
char** array = list_to_array(alias);
int index = 0;
while(array[index] != NULL) {
fputs(array[index], stdout);
fputc('\n', stdout);
index = index + 1;
}
fflush(stdout);
return;
}
if(!is_envar(token->value)) {
char** array = list_to_array(token);
int index = 0;
while(array[index] != NULL) {
fputs(array[index], stdout);
fputc(' ', stdout);
index = index + 1;
}
fputc('\n', stdout);
fflush(stdout);
return;
}
/* Pointers to strings we want */
char* name = calloc(strlen(token->value) + 4, sizeof(char));
char* value = token->value;
char* newvalue;
int i = 0;
/* Isolate the name */
while('=' != value[i])
{
name[i] = value[i];
i = i + 1;
}
/* Isolate the value */
newvalue = name + i + 2;
value = value + i + 1;
i = 0;
require(0 != value[i], "add_alias received improper variable\n");
while(0 != value[i])
{
newvalue[i] = value[i];
i = i + 1;
}
/* If this is the first alias, rectify */
if(alias == NULL)
{
alias = calloc(1, sizeof(struct Token));
require(alias != NULL, "Memory initialization of alias failed\n");
alias->var = name; /* Add our first variable */
}
struct Token* n = alias;
/* Find match if possible */
while(!match(name, n->var))
{
if(NULL == n->next)
{
n->next = calloc(1, sizeof(struct Token));
require(n->next != NULL, "Memory initialization of next alias node in alias failed\n");
n->next->var = name;
} /* Loop will match and exit */
n = n->next;
}
/* Since we found the variable we need only to set it to its new value */
n->value = newvalue;
}
/* cd builtin */
int cd(void)
{
if(NULL == token->next)
{
return FAILURE;
}
token = token->next;
if(NULL == token->value)
{
return FAILURE;
}
int ret = chdir(token->value);
if(0 > ret)
{
return FAILURE;
}
return SUCCESS;
}
/* pwd builtin */
int pwd(void)
{
char* path = calloc(MAX_STRING, sizeof(char));
require(path != NULL, "Memory initialization of path in pwd failed\n");
getcwd(path, MAX_STRING);
require(!match("", path), "getcwd() failed\n");
fputs(path, stdout);
fputs("\n", stdout);
return SUCCESS;
}
/* set builtin */
int set(void)
{
/* Get the options */
int i;
if(NULL == token->next)
{
goto cleanup_set;
}
token = token->next;
if(NULL == token->value)
{
goto cleanup_set;
}
char* options = calloc(MAX_STRING, sizeof(char));
require(options != NULL, "Memory initialization of options in set failed\n");
int last_position = strlen(token->value) - 1;
for(i = 0; i < last_position; i = i + 1)
{
options[i] = token->value[i + 1];
}
/* Parse the options */
int options_length = strlen(options);
for(i = 0; i < options_length; i = i + 1)
{
if(options[i] == 'a')
{
/* set -a is on by default and cannot be disabled at this time */
if(WARNINGS)
{
fputs("set -a is on by default and cannot be disabled\n", stdout);
}
continue;
}
else if(options[i] == 'e')
{
/* Fail on failure */
STRICT = TRUE;
}
else if(options[i] == 'x')
{
/* Show commands as executed */
/* TODO: this currently behaves like -v. Make it do what it should */
VERBOSE = TRUE;
/*
* Output the set -x because VERBOSE didn't catch it before.
* We don't do just -x because we support multiple options in one command,
* eg set -ex.
*/
fputs(" +> set -", stdout);
fputs(options, stdout);
fputs("\n", stdout);
fflush(stdout);
}
else
{
/* Invalid */
fputc(options[i], stderr);
fputs(" is an invalid set option!\n", stderr);
exit(EXIT_FAILURE);
}
}
return SUCCESS;
cleanup_set:
return FAILURE;
}
/* echo builtin */
void echo(void)
{
if(token->next == NULL)
{
/* No arguments */
fputs("\n", stdout);
return;
}
if(token->next->value == NULL)
{
/* No arguments */
fputs("\n", stdout);
return;
}
token = token->next; /* Skip the actual echo */
while(token != NULL)
{
/* Output each argument to echo to stdout */
if(token->value == NULL)
{
break;
}
fputs(token->value, stdout);
if(NULL != token->next)
{
/* M2-Planet doesn't short circuit */
if(NULL != token->next->value) fputc(' ', stdout);
}
token = token->next;
}
fputs("\n", stdout);
}
/* unset builtin */
void unset(void)
{
struct Token* e;
/* We support multiple variables on the same line */
struct Token* t;
t = token->next;
while(t != NULL)
{
e = env;
/* Look for the variable; we operate on ->next because we need to remove ->next */
while(e->next != NULL)
{
if(NULL == t->value)
{
break;
}
if(match(e->next->var, t->value))
{
break;
}
e = e->next;
}
t = t->next;
/* If it's NULL nothing was found */
if(e->next == NULL)
{
continue;
}
/* Otherwise there is something to unset */
e->next = e->next->next;
}
}
void execute(FILE* script, char** argv);
int _execute(FILE* script, char** argv);
int collect_command(FILE* script, char** argv);
/* if builtin */
void if_cmd(FILE* script, char** argv)
{
int index;
int old_VERBOSE;
token = token->next; /* Skip the actual if */
/* Do not check for successful exit status */
int if_status = _execute(script, argv);
old_VERBOSE = VERBOSE;
VERBOSE = VERBOSE && !if_status;
do
{
index = collect_command(script, argv);
require(index != -1, "Unexpected EOF, improperly terminated if statement.\n");
if(0 == index)
{
continue;
}
if(0 == if_status)
{
/* Stuff to exec */
execute(script, argv);
}
if(match(token->value, "else"))
{
if_status = !if_status;
}
} while(!match(token->value, "fi"));
VERBOSE = old_VERBOSE;
}
int what_exit(char* program, int status)
{
/***********************************************************************************
* If the low-order 8 bits of w_status are equal to 0x7F or zero, the child *
* process has stopped. If the low-order 8 bits of w_status are non-zero and are *
* not equal to 0x7F, the child process terminated due to a signal otherwise, the *
* child process terminated due to an exit() call. *
* *
* In the event it was a signal that stopped the process the top 8 bits of *
* w_status contain the signal that caused the process to stop. *
* *
* In the event it was terminated the bottom 7 bits of w_status contain the *
* terminating error number for the process. *
* *
* If bit 0x80 of w_status is set, a core dump was produced. *
***********************************************************************************/
int WIFEXITED = !(status & 0x7F);
int WEXITSTATUS = (status & 0xFF00) >> 8;
int WTERMSIG = status & 0x7F;
int WCOREDUMP = status & 0x80;
int WIFSIGNALED = !((0x7F == WTERMSIG) || (0 == WTERMSIG));
int WIFSTOPPED = ((0x7F == WTERMSIG) && (0 == WCOREDUMP));
if(WIFEXITED)
{
if(VERBOSE_EXIT)
{
fputc('\n', stderr);
fputs(program, stderr);
fputs(" normal termination, exit status = ", stderr);
fputs(int2str(WEXITSTATUS, 10, TRUE), stderr);
fputs("\n\n\n", stderr);
}
return WEXITSTATUS;
}
else if (WIFSIGNALED)
{
fputc('\n', stderr);
fputs(program, stderr);
fputs(" abnormal termination, signal number = ", stderr);
fputs(int2str(WTERMSIG, 10, TRUE), stderr);
fputc('\n', stderr);
if(WCOREDUMP) fputs("core dumped\n", stderr);
return WTERMSIG;
}
else if(WIFSTOPPED)
{
fputc('\n', stderr);
fputs(program, stderr);
fputs(" child stopped, signal number = ", stderr);
fputs(int2str(WEXITSTATUS, 10, TRUE), stderr);
fputc('\n', stderr);
return WEXITSTATUS;
}
fputc('\n', stderr);
fputs(program, stderr);
fputs(" :: something crazy happened with execve\nI'm just gonna get the hell out of here\n", stderr);
exit(EXIT_FAILURE);
}
/* Execute program and check for error */
void execute(FILE* script, char** argv)
{
int status = _execute(script, argv);
if(STRICT == TRUE && (0 != status))
{
/* Clearly the script hit an issue that should never have happened */
fputs("Subprocess error ", stderr);
fputs(int2str(status, 10, TRUE), stderr);
fputs("\nABORTING HARD\n", stderr);
exit(EXIT_FAILURE);
}
}
/* Execute program */
int _execute(FILE* script, char** argv)
{
/* Run the command */
/* rc = return code */
int rc;
/* exec without forking */
int exec = FALSE;
/* Actually do the execution */
if(is_envar(token->value) == TRUE)
{
add_envar();
return 0;
}
else if(match(token->value, "cd"))
{
rc = cd();
if(STRICT)
{
require(rc == SUCCESS, "cd failed!\n");
}
return 0;
}
else if(match(token->value, "set"))
{
rc = set();
if(STRICT)
{
require(rc == SUCCESS, "set failed!\n");
}
return 0;
}
else if(match(token->value, "alias"))
{
add_alias();
return 0;
}
else if(match(token->value, "pwd"))
{
rc = pwd();
if(STRICT)
{
require(rc == SUCCESS, "pwd failed!\n");
}
return 0;
}
else if(match(token->value, "echo"))
{
echo();
return 0;
}
else if(match(token->value, "unset"))
{
unset();
return 0;
}
else if(match(token->value, "exec"))
{
token = token->next; /* Skip the actual exec */
exec = TRUE;
}
else if(match(token->value, "if"))
{
if_cmd(script, argv);
return 0;
}
else if(match(token->value, "then"))
{
/* ignore */
return 0;
}
else if(match(token->value, "else"))
{
/* ignore */
return 0;
}
else if(match(token->value, "fi"))
{
/* ignore */
return 0;
}
/* If it is not a builtin, run it as an executable */
int status; /* i.e. return code */
char** array;
char** envp;
/* Get the full path to the executable */
char* program = find_executable(token->value);
/* Check we can find the executable */
if(NULL == program)
{
if(STRICT == TRUE)
{
fputs("WHILE EXECUTING ", stderr);
fputs(token->value, stderr);
fputs(" NOT FOUND!\nABORTING HARD\n", stderr);
exit(EXIT_FAILURE);
}
/* If we are not strict simply return */
return 0;
}
int f = 0;
#ifdef __uefi__
array = list_to_array(token);
envp = list_to_array(env);
return spawn(program, array, envp);
#else
if(!exec)
{
f = fork();
}
/* Ensure fork succeeded */
if(f == -1)
{
fputs("WHILE EXECUTING ", stderr);
fputs(token->value, stderr);
fputs(" fork() FAILED\nABORTING HARD\n", stderr);
exit(EXIT_FAILURE);
}
else if(f == 0)
{
/* Child */
/**************************************************************
* Fuzzing produces random stuff; we don't want it running *
* dangerous commands. So we just don't execve. *
* But, we still do the list_to_array calls to check for *
* segfaults. *
**************************************************************/
array = list_to_array(token);
envp = list_to_array(env);
if(FALSE == FUZZING)
{
/* We are not fuzzing */
/* execve() returns only on error */
execve(program, array, envp);
}
/* Prevent infinite loops */
exit(EXIT_FAILURE);
}
/* Otherwise we are the parent */
/* And we should wait for it to complete */
waitpid(f, &status, 0);
return what_exit(program, status);
#endif
}
int collect_command(FILE* script, char** argv)
{
command_done = FALSE;
/* Initialize token */
struct Token* n;
n = calloc(1, sizeof(struct Token));
require(n != NULL, "Memory initialization of token in collect_command failed\n");
char* s = calloc(MAX_STRING, sizeof(char));
require(s != NULL, "Memory initialization of token in collect_command failed\n");
token = n;
int index = 0;
int alias_index;
char* alias_string;
/* Get the tokens */
while(command_done == FALSE)
{
index = collect_token(script, s, index);
/* Don't allocate another node if the current one yielded nothing, OR
* if we are done.
*/
if(match(s, ""))
{
continue;
}
alias_string = alias_lookup(s);
alias_index = 0;
do
{
if(alias_string != NULL)
{
alias_index = collect_alias_token(alias_string, s, alias_index);
}
/* add to token */
n->value = s;
s = calloc(MAX_STRING, sizeof(char));
require(s != NULL, "Memory initialization of next token node in collect_command failed\n");
/* Deal with variables */
handle_variables(argv, n);
/* If the variable expands into nothing */
if(match(n->value, " "))
{
n->value = NULL;
continue;
}
/* Prepare for next loop */
n->next = calloc(1, sizeof(struct Token));
require(n->next != NULL, "Memory initialization of next token node in collect_command failed\n");
n = n->next;
}
while(alias_index != 0);
}
/* -1 means the script is done */
if(EOF == index)
{
return index;
}
/* Output the command if verbose is set */
/* Also if there is nothing in the command skip over */
if(VERBOSE && !match(token->value, "") && !match(token->value, NULL))
{
n = token;
fputs(" +>", stdout);
while(n != NULL)
{
/* Print out each token token */
fputs(" ", stdout);
/* M2-Planet doesn't let us do this in the while */
if(n->value != NULL)
{
if(!match(n->value, ""))
{
fputs(n->value, stdout);
}
}
n = n->next;
}
fputc('\n', stdout);
fflush(stdout);
}
return index;
}
/* Function for executing our programs with desired arguments */
void run_script(FILE* script, char** argv)
{
int index;
while(TRUE)
{
/*
* Tokens has to be reset each time, as we need a new linked-list for
* each line.
* See, the program flows like this as a high level overview:
* Get line -> Sanitize line and perform variable replacement etc ->
* Execute line -> Next.
* We don't need the previous lines once they are done with, so tokens
* are hence for each line.
*/
index = collect_command(script, argv);
/* -1 means the script is done */
if(EOF == index)
{
break;
}
if(0 == index)
{
continue;
}
/* Stuff to exec */
execute(script, argv);
}
}
/* Function to populate env */
void populate_env(char** envp)
{
/* You can't populate a NULL environment */
if(NULL == envp)
{
return;
}
/* avoid empty arrays */
int max = array_length(envp);
if(0 == max)
{
return;
}
/* Initialize env and n */
env = calloc(1, sizeof(struct Token));
require(env != NULL, "Memory initialization of env failed\n");
struct Token* n;
n = env;
int i;
int j;
int k;
char* envp_line;
for(i = 0; i < max; i = i + 1)
{
n->var = calloc(MAX_STRING, sizeof(char));
require(n->var != NULL, "Memory initialization of n->var in population of env failed\n");
n->value = calloc(MAX_STRING, sizeof(char));
require(n->value != NULL, "Memory initialization of n->var in population of env failed\n");
j = 0;
/*
* envp is weird.
* When referencing envp[i]'s characters directly, they were all jumbled.
* So just copy envp[i] to envp_line, and work with that - that seems
* to fix it.
*/
envp_line = calloc(MAX_STRING, sizeof(char));
require(envp_line != NULL, "Memory initialization of envp_line in population of env failed\n");
strcpy(envp_line, envp[i]);
while(envp_line[j] != '=')
{
/* Copy over everything up to = to var */
n->var[j] = envp_line[j];
j = j + 1;
}
/* If we get strange input, we need to ignore it */
if(n->var == NULL)
{
continue;
}
j = j + 1; /* Skip over = */
k = 0; /* As envp[i] will continue as j but n->value begins at 0 */
while(envp_line[j] != 0)
{
/* Copy everything else to value */
n->value[k] = envp_line[j];
j = j + 1;
k = k + 1;
}
/* Sometimes, we get lines like VAR=, indicating nothing is in the variable */
if(n->value == NULL)
{
n->value = "";
}
/* Advance to next part of linked list */
n->next = calloc(1, sizeof(struct Token));
require(n->next != NULL, "Memory initialization of n->next in population of env failed\n");
n = n->next;
}
/* Get rid of node on the end */
n = NULL;
/* Also destroy the n->next reference */
n = env;
while(n->next->var != NULL)
{
n = n->next;
}
n->next = NULL;
}
int main(int argc, char** argv)
{
char** envp = argv + (argc + 1);
VERBOSE = FALSE;
VERBOSE_EXIT = FALSE;
STRICT = TRUE;
FUZZING = FALSE;
WARNINGS = FALSE;
char* filename = "kaem.run";
FILE* script = NULL;
/* Initalize structs */
token = calloc(1, sizeof(struct Token));
require(token != NULL, "Memory initialization of token failed\n");
if(NULL != argv[0]) KAEM_BINARY = argv[0];
else KAEM_BINARY = "./bin/kaem";
int i = 1;
/* Loop over arguments */
while(i <= argc)
{
if(NULL == argv[i])
{
/* Ignore the argument */
i = i + 1;
}
else if(match(argv[i], "-h") || match(argv[i], "--help"))
{
/* Help information */
fputs("Usage: ", stdout);
fputs(argv[0], stdout);
fputs(" [-h | --help] [-V | --version] [--file filename | -f filename] [-i | --init-mode] [-v | --verbose] [--non-strict] [--warn] [--fuzz]\n", stdout);
exit(EXIT_SUCCESS);
}
else if(match(argv[i], "-f") || match(argv[i], "--file"))
{
/* Set the filename */
if(argv[i + 1] != NULL)
{
filename = argv[i + 1];
}
i = i + 2;
}
else if(match(argv[i], "-i") || match(argv[i], "--init-mode"))
{
/* init mode does not populate env */
INIT_MODE = TRUE;
i = i + 1;
}
else if(match(argv[i], "-V") || match(argv[i], "--version"))
{
/* Output version */
fputs("kaem version 1.4.0\n", stdout);
exit(EXIT_SUCCESS);
}
else if(match(argv[i], "-v") || match(argv[i], "--verbose"))
{
/* Set verbose */
VERBOSE = TRUE;
i = i + 1;
}
else if(match(argv[i], "--strict"))
{
/* it is a NOP */
STRICT = TRUE;
i = i + 1;
}
else if(match(argv[i], "--non-strict"))
{
/* Set strict */
STRICT = FALSE;
i = i + 1;
}
else if(match(argv[i], "--warn"))
{
/* Set warnings */
WARNINGS = TRUE;
i = i + 1;
}
else if(match(argv[i], "--fuzz"))
{
/* Set fuzzing */
FUZZING = TRUE;
i = i + 1;
}
else if(match(argv[i], "--show-exit-codes"))
{
/* show exit codes */
VERBOSE_EXIT = TRUE;
i = i + 1;
}
else if(match(argv[i], "--"))
{
/* Nothing more after this */
break;
}
else
{
/* We don't know this argument */
fputs("UNKNOWN ARGUMENT\n", stdout);
exit(EXIT_FAILURE);
}
}
/* Populate env */
if(INIT_MODE == FALSE)
{
populate_env(envp);
}
/* make sure SHELL is set */
if(NULL == env_lookup("SHELL"))
{
struct Token* shell = calloc(1, sizeof(struct Token));
require(NULL != shell, "unable to create SHELL environment variable\n");
shell->next = env;
shell->var = "SHELL";
shell->value= KAEM_BINARY;
env = shell;
}
/* Populate PATH variable
* We don't need to calloc() because env_lookup() does this for us.
*/
PATH = env_lookup("PATH");
/* Populate USERNAME variable */
char* USERNAME = env_lookup("LOGNAME");
/* Handle edge cases */
if((NULL == PATH) && (NULL == USERNAME))
{
/* We didn't find either of PATH or USERNAME -- use a generic PATH */
PATH = calloc(MAX_STRING, sizeof(char));
require(PATH != NULL, "Memory initialization of PATH failed\n");
strcpy(PATH, "/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin");
}
else if(NULL == PATH)
{
/* We did find a username but not a PATH -- use a generic PATH but with /home/USERNAME */
PATH = calloc(MAX_STRING, sizeof(char));
PATH = strcat(PATH, "/home/");
PATH = strcat(PATH, USERNAME);
PATH = strcat(PATH, "/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games");
}
/* Open the script */
script = fopen(filename, "r");
if(NULL == script)
{
fputs("The file: ", stderr);
fputs(filename, stderr);
fputs(" can not be opened!\n", stderr);
exit(EXIT_FAILURE);
}
/* Run the commands */
run_script(script, argv);
/* Cleanup */
fclose(script);
return EXIT_SUCCESS;
}
#!/bin/sh set +x cd src # Compile equal.c /usr/bin/tcc_cc -o /tmp/equal.sl equal.c /usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/equal.sl -o /tmp/equal.M1 /usr/bin/blood-elf --file /tmp/equal.M1 --little-endian --output /tmp/equal.blood_elf /usr/bin/M1 /tmp/equal.M1 -o /tmp/equal.macro /usr/bin/hex2 -o /usr/bin/equal /x86/ELF-x86-debug.hex2 /tmp/equal.macro /tmp/equal.blood_elf # Check tcc_cc.sl /usr/bin/tcc_cc -o /tmp/tcc_cc.sl stdlib.c tcc_cc.c /usr/bin/equal /src/tcc_cc.sl /tmp/tcc_cc.sl # Check stack_c_s.M1 /usr/bin/tcc_cc -o /tmp/stack_c.sl stdlib.c stack_c.c /usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/stack_c.sl -o /tmp/stack_c.M1 /usr/bin/equal /x86/stack_c_s.M1 /tmp/stack_c.M1 # Check M1_s.blood_elf and M1_s.macro /usr/bin/tcc_cc -o /tmp/M1.sl stdlib.c M1.c /usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/M1.sl -o /tmp/M1.M1 /usr/bin/blood-elf --file /tmp/M1.M1 --little-endian --output /tmp/M1.blood_elf /usr/bin/M1 /tmp/M1.M1 -o /tmp/M1.macro /usr/bin/equal /x86/M1_s.blood_elf /tmp/M1.blood_elf /usr/bin/equal /x86/M1_s.macro /tmp/M1.macro # Check blood-elf_s.blood_elf and blood-elf_s.macro /usr/bin/tcc_cc -o /tmp/blood-elf.sl stdlib.c blood-elf.c /usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/blood-elf.sl -o /tmp/blood-elf.M1 /usr/bin/blood-elf --file /tmp/blood-elf.M1 --little-endian --output /tmp/blood-elf.blood_elf /usr/bin/M1 /tmp/blood-elf.M1 -o /tmp/blood-elf.macro /usr/bin/equal /x86/blood-elf_s.blood_elf /tmp/blood-elf.blood_elf /usr/bin/equal /x86/blood-elf_s.macro /tmp/blood-elf.macro # Check hex2_s.hex0 /usr/bin/tcc_cc -o /tmp/hex2.sl hex2.c /usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/hex2.sl -o /tmp/hex2.M1 /usr/bin/blood-elf --file /tmp/hex2.M1 --little-endian --output /tmp/hex2.blood_elf /usr/bin/M1 /tmp/hex2.M1 -o /tmp/hex2.macro /usr/bin/hex2 -o /tmp/hex2.hex0 /x86/ELF-x86-debug.hex2 /tmp/hex2.macro /tmp/hex2.blood_elf /usr/bin/equal /x86/hex2_s.hex0 /tmp/hex2.hex0 # Check kaem-minimal_s.hex0 /usr/bin/tcc_cc -o /tmp/kaem-minimal.sl kaem-minimal.c /usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/kaem-minimal.sl -o /tmp/kaem-minimal.M1 /usr/bin/blood-elf --file /tmp/kaem-minimal.M1 --little-endian --output /tmp/kaem-minimal.blood_elf /usr/bin/M1 /tmp/kaem-minimal.M1 -o /tmp/kaem-minimal.macro /usr/bin/hex2 -o /tmp/kaem-minimal.hex0 /x86/ELF-x86-debug.hex2 /tmp/kaem-minimal.macro /tmp/kaem-minimal.blood_elf /usr/bin/equal /x86/kaem-minimal_s.hex0 /tmp/kaem-minimal.hex0 # Check hex0_s.hex0 /usr/bin/tcc_cc -o /tmp/hex0.sl hex0.c /usr/bin/stack_c -i /x86/stack_c_intro.M1 /tmp/hex0.sl -o /tmp/hex0.M1 /usr/bin/blood-elf --file /tmp/hex0.M1 --little-endian --output /tmp/hex0.blood_elf /usr/bin/M1 /tmp/hex0.M1 -o /tmp/hex0.macro /usr/bin/hex2 -o /tmp/hex0.hex0 /x86/ELF-x86-debug.hex2 /tmp/hex0.macro /tmp/hex0.blood_elf /usr/bin/equal /x86/hex0_s.hex0 /tmp/hex0.hex0 cd ..
#include <fcntl.h>
#include <unistd.h>
#ifdef __TCC_CC__
char **_sys_env = 0;
int sys_int80(int a, int b, int c, int d);
#define O_RDONLY 0
#define open(pathname, mode) sys_int80(5, pathname, mode, 0777)
#define read(fd, buf, count) sys_int80(3, fd, buf, count)
#define close(fd) sys_int80(6, fd, 0, 0)
#endif
int fhgetc(int fh)
{
unsigned char ch;
if (read(fh, &ch, 1) != 1)
return -1;
return ch;
}
int main(int argc, char *argv[])
{
int fh1 = open(argv[1], O_RDONLY);
int fh2 = open(argv[2], O_RDONLY);
int result = -1;
for (;;)
{
int ch = fhgetc(fh1);
if (fhgetc(fh2) != ch)
break;
if (ch == -1)
{
result = 0;
break;
}
}
close(fh1);
close(fh2);
return result;
}#include <stdio.h>
#include <malloc.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
// ----- bool -----
typedef char bool;
#define TRUE 1
#define FALSE 0
// ------ string -------
bool eqstr(char* s, char* t)
{
return strcmp(s, t) == 0;
}
// ----- Strings ----
char* copystr(const char* str)
{
int len = strlen(str);
char* new_str = malloc(len + 1);
strcpy(new_str, str);
return new_str;
}
char* copystrlen(const char* str, int len)
{
char* new_str = malloc(len + 1);
memcpy(new_str, str, len + 1);
return new_str;
}
// Options
bool opt_trace_parser = FALSE;
// Preprocessor
// The preprocessor is implemented with the use of iterators.
// There are character iterators and token iterators.
// The base character iterator:
typedef struct char_iterator_s char_iterator_t;
typedef struct char_iterator_s* char_iterator_p;
typedef void (*char_next_p)(char_iterator_p);
struct char_iterator_s
{
char ch;
long line;
long column;
char* filename;
char_next_p next;
};
// The file iterator
// On creation it points to the first character of the file
// and on each call to the next function it returns the next
// character of the file, where the file is thought to be
// extended with an infinite number of null ('\0') characters
// and carriage return characters ('\r') are skipped.
// The line and column members are updated according to
// line feed ('\n') characters in the file.
struct file_iterator_s
{
char_iterator_t base;
FILE* _f;
};
typedef struct file_iterator_s* file_iterator_p;
void file_iterator_next(char_iterator_p char_it)
{
file_iterator_p it = (file_iterator_p)char_it;
if (it->base.ch == 0)
{
return;
}
if (it->base.ch == '\n')
{
it->base.line = it->base.line + 1;
it->base.column = 0;
}
it->base.column = it->base.column + 1;
if (it->_f == NULL)
{
it->base.ch = 0;
return;
}
it->base.ch = fgetc(it->_f);
if (feof(it->_f))
{
it->base.ch = '\0';
fclose(it->_f);
it->_f = NULL;
}
else if (it->base.ch == '\r')
{
file_iterator_next(char_it);
}
}
file_iterator_p new_file_iterator(const char* fn)
{
file_iterator_p it = malloc(sizeof(struct file_iterator_s));
it->_f = fopen(fn, "r");
it->base.ch = '\n';
if (it->_f == 0)
{
it->base.ch = 0;
}
it->base.filename = copystr(fn);
it->base.line = 0;
it->base.column = 0;
it->base.next = file_iterator_next;
file_iterator_next(&it->base);
return it;
}
// The line splice iterator
// The line splice iterator takes care that lines that end
// with a back-slash ('\\') character are joined with the
// next line. On creation the iterator points to the first
// character in the file, assuming that pairs of a
// back-slash charater and line-feed characters are ignored.
// On each call of the next function, the following character
// ignoring such pairs is returned.
struct line_splice_iterator_s
{
char_iterator_t base;
char_iterator_p _source_it;
char _a;
};
typedef struct line_splice_iterator_s* line_splice_iterator_p;
void line_splice_iterator_next(char_iterator_p char_it)
{
line_splice_iterator_p it = (line_splice_iterator_p)char_it;
char_next_p _source_it_next; _source_it_next = it->_source_it->next;
//fprintf(stderr, "line_splice_iterator_next\n");
if (it->_a == 0)
{
it->base.ch = 0;
return;
}
it->base.ch = it->_a;
it->base.filename = it->_source_it->filename;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
_source_it_next(it->_source_it);
it->_a = it->_source_it->ch;
while (it->base.ch == '\\' && it->_a == '\n')
{
_source_it_next(it->_source_it);
it->base.ch = it->_source_it->ch;
it->base.filename = it->_source_it->filename;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
_source_it_next(it->_source_it);
it->_a = it->_source_it->ch;
}
}
line_splice_iterator_p new_line_splice_iterator(char_iterator_p source_it)
{
line_splice_iterator_p it = malloc(sizeof(struct line_splice_iterator_s));
it->_source_it = source_it;
it->base.filename = source_it->filename;
it->base.next = line_splice_iterator_next;
it->_a = source_it->ch;
line_splice_iterator_next(&it->base);
return it;
}
// The comment strip iterator
// The comment strip iterator removes all comments from the input.
// It supports both the original comments which are delimited by
// '/*' and '*/' and the new comments with are delimited by '//'
// and a new-line character. The original comments are replaced
// by a space character and the new comments are replace by a
// new-line character.
// The function comment_strip_iterator_next is implemented as a
// co-routine with the help of goto statements.
struct comment_strip_iterator_s
{
char_iterator_t base;
char_iterator_p _source_it;
char _a;
int _state;
};
typedef struct comment_strip_iterator_s* comment_strip_iterator_p;
void comment_strip_iterator_next(char_iterator_p char_it)
{
comment_strip_iterator_p it = (comment_strip_iterator_p)char_it;
char_next_p _source_it_next; _source_it_next = it->_source_it->next;
switch (it->_state)
{
case 0: goto s0;
case 1: goto s1;
case 2: goto s2;
case 3: goto s3;
case 4: goto s4;
case 5: goto s5;
case 6: goto s6;
case 7: goto s7;
case 8: goto s8;
case 9: goto s9;
default:
}
s0:
if (it->_a == '\0')
{
it->base.ch = '\0';
return;
}
it->base.ch = it->_a;
it->base.filename = it->_source_it->filename;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
_source_it_next(it->_source_it);
it->_a = it->_source_it->ch;
if (it->base.ch == '/' && (it->_a == '/' || it->_a == '*'))
{
if (it->_a == '/')
{
while (it->_a != '\0' && it->_a != '\n')
{
_source_it_next(it->_source_it);
it->_a = it->_source_it->ch;
}
}
else
{
it->base.ch = ' ';
it->_state = 1; return; s1:
_source_it_next(it->_source_it);
it->base.ch = it->_source_it->ch;
_source_it_next(it->_source_it);
it->_a = it->_source_it->ch;
while (it->base.ch != '\0' && (it->base.ch != '*' || it->_a != '/'))
{
it->base.ch = it->_a;
_source_it_next(it->_source_it);
it->_a = it->_source_it->ch;
}
if (it->base.ch != '\0')
{
_source_it_next(it->_source_it);
it->_a = it->_source_it->ch;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
}
}
it->_state = 0;
goto s0;
}
if (it->base.ch == '"')
{
it->_state = 2; return; s2:
it->base.ch = it->_a;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
while (it->base.ch != '\0' && it->base.ch != '"')
{
if (it->base.ch == '\\')
{
it->_state = 3; return; s3:
_source_it_next(it->_source_it);
it->base.ch = it->_source_it->ch;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
}
it->_state = 4; return; s4:
_source_it_next(it->_source_it);
it->base.ch = it->_source_it->ch;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
}
if (it->base.ch == '"')
{
it->_state = 5; return; s5:
_source_it_next(it->_source_it);
it->_a = it->_source_it->ch;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
}
it->_state = 0;
goto s0;
}
if (it->base.ch == '\'')
{
it->_state = 6; return; s6:
it->base.ch = it->_a;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
if (it->base.ch == '\\')
{
it->_state = 7; return; s7:
_source_it_next(it->_source_it);
it->base.ch = it->_source_it->ch;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
}
it->_state = 8; return; s8:
_source_it_next(it->_source_it);
it->base.ch = it->_source_it->ch;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
it->_state = 0;
if (it->base.ch == '\'')
{
it->_state = 9; return; s9:
_source_it_next(it->_source_it);
it->_a = it->_source_it->ch;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
}
it->_state = 0;
goto s0;
}
}
comment_strip_iterator_p new_comment_strip_iterator(char_iterator_p source_it)
{
comment_strip_iterator_p it = malloc(sizeof(struct comment_strip_iterator_s));
it->_source_it = source_it;
it->base.filename = source_it->filename;
it->base.next = comment_strip_iterator_next;
it->_a = source_it->ch;
it->_state = 0;
comment_strip_iterator_next(&it->base);
return it;
}
// The include iterator
// The include iterator allows character of another character
// iterator to be included in an existing stream by calling
// the function 'include_iterator_add'. Recursive including
// is supported.
struct include_iterator_s
{
char_iterator_t base;
char_iterator_p _source_it;
char_iterator_p _parent_source_its[10];
int _nr_parents;
};
typedef struct include_iterator_s* include_iterator_p;
void include_iterator_next(char_iterator_p char_it)
{
include_iterator_p it = (include_iterator_p)char_it;
char_next_p _source_it_next; _source_it_next = it->_source_it->next;
_source_it_next(it->_source_it);
it->base.ch = it->_source_it->ch;
if (it->base.ch == 0)
{
if (it->_nr_parents == 0)
{
it->base.ch = 0;
return;
}
it->base.ch = '\n';
it->_nr_parents = it->_nr_parents - 1;
it->_source_it = it->_parent_source_its[it->_nr_parents];
it->base.filename = it->_source_it->filename;
}
it->base.filename = it->_source_it->filename;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
}
void include_iterator_add(include_iterator_p it, char_iterator_p include_it)
{
it->_parent_source_its[it->_nr_parents] = it->_source_it;
it->_nr_parents = it->_nr_parents + 1;
it->_source_it = include_it;
it->base.filename = it->_source_it->filename;
it->base.line = it->_source_it->line;
it->base.column = it->_source_it->column;
it->base.ch = it->_source_it->ch;
}
include_iterator_p new_include_iterator(char_iterator_p include_it)
{
include_iterator_p it = malloc(sizeof(struct include_iterator_s));
it->base.filename = include_it->filename;
it->base.line = include_it->line;
it->base.column = include_it->column;
it->base.ch = include_it->ch;
it->base.next = include_iterator_next;
it->_source_it = include_it;
it->_nr_parents = 0;
return it;
}
// Token definitions
// Definition of defines for tokens that are not represented
// by a single character.
#define TK_D_HASH 500
#define TK_EQ 501
#define TK_NE 502
#define TK_LE 503
#define TK_GE 504
#define TK_INC 505
#define TK_DEC 506
#define TK_ARROW 507
#define TK_DPERIOD 508
#define TK_DASHES 509
#define TK_ASS 600
#define TK_MUL_ASS (600 + '*')
#define TK_DIV_ASS (600 + '/')
#define TK_MOD_ASS (600 + '%')
#define TK_ADD_ASS (600 + '+')
#define TK_SUB_ASS (600 + '-')
#define TK_SHL_ASS (600 + '<')
#define TK_SHR_ASS (600 + '>')
#define TK_XOR_ASS (600 + '^')
#define TK_BAND_ASS (600 + '&')
#define TK_BOR_ASS (600 + '|')
#define TK_DD_OPER 800
#define TK_SHL (800 + '<')
#define TK_SHR (800 + '>')
#define TK_AND (800 + '&')
#define TK_OR (800 + '|')
#define TK_KEYWORD 1000
#define TK_BREAK 1000
#define TK_CASE 1001
#define TK_CHAR 1002
#define TK_CONST 1003
#define TK_CONTINUE 1004
#define TK_DEFAULT 1005
#define TK_DO 1006
#define TK_DOUBLE 1007
#define TK_ELSE 1008
#define TK_ENUM 1009
#define TK_EXTERN 1010
#define TK_FLOAT 1011
#define TK_FOR 1012
#define TK_GOTO 1013
#define TK_IF 1014
#define TK_INLINE 1015
#define TK_INT 1016
#define TK_LONG 1017
#define TK_RETURN 1018
#define TK_SHORT 1019
#define TK_SIZEOF 1020
#define TK_STATIC 1021
#define TK_STRUCT 1022
#define TK_SWITCH 1023
#define TK_TYPEDEF 1024
#define TK_UNION 1025
#define TK_UNSIGNED 1026
#define TK_VOID 1027
#define TK_WHILE 1028
#define TK_H_ELSE 1029
#define TK_H_ELIF 1030
#define TK_H_ENDIF 1031
#define TK_H_DEFINE 1032
#define TK_DEFINED 1033
#define TK_H_IF 1034
#define TK_H_IFDEF 1035
#define TK_H_IFNDEF 1036
#define TK_H_INCLUDE 1037
#define TK_H_UNDEF 1038
#define TK_H_ERROR 1039
// The base token iterator
typedef struct token_iterator_s token_iterator_t;
typedef struct token_iterator_s* token_iterator_p;
typedef token_iterator_p (*token_next_p)(token_iterator_p, bool);
struct token_iterator_s
{
int kind;
char *token;
unsigned int length;
char *filename;
int line;
int column;
token_next_p next;
};
// The tokenizer iterator
// The tokenizer iterator recognizes the C tokens from the
// stream of characters returned by a character iterator.
// On creation it is on the first recognized token and
// on each call to the next function it returns the next
// recognized token.
struct tokenizer_s
{
token_iterator_t base;
char_iterator_p _char_iterator;
};
typedef struct tokenizer_s *tokenizer_p;
void tokenizer_skip_white_space(tokenizer_p tokenizer, bool skip_nl)
{
char_iterator_p it; it = tokenizer->_char_iterator;
char_next_p it_next = it->next;
char ch = it->ch;
while (ch != 0 && ch <= ' ' && (skip_nl || ch != '\n'))
{
it_next(it); ch = it->ch;
}
}
char tokenizer_parse_char_literal(tokenizer_p tokenizer)
{
char_iterator_p it = tokenizer->_char_iterator;
char_next_p it_next; it_next = it->next;
char ch = it->ch;
it_next(it);
if (ch != '\\')
{
return ch;
}
ch = it->ch;
it_next(it);
if (ch == '0' || ch == '1')
{
int val = ch - '0';
ch = it->ch;
if ('0' <= ch && ch <= '7')
{
val = 8 * val + ch - '0';
it_next(it);
ch = it->ch;
if ('0' <= ch && ch <= '7')
{
val = 8 * val + ch - '0';
it_next(it);
}
return val;
}
else if (val == 0)
{
return 0;
}
else
{
return '1';
}
}
if (ch == 'a')
{
ch = '\a';
}
else if (ch == 'b')
{
ch = '\b';
}
else if (ch == 'f')
{
ch = '\f';
}
else if (ch == 'n')
{
ch = '\n';
}
else if (ch == 'r')
{
ch = '\r';
}
else if (ch == 't')
{
ch = '\t';
}
else if (ch == 'v')
{
ch = '\v';
}
else if (ch == 'x')
{
int v = 0;
ch = it->ch;
if ('0' <= ch && ch <= '9')
v = 16 * (ch - '0');
else if ('A' <= ch && ch <= 'F')
v = 16 * (ch - 'A' + 10);
else if ('a' <= ch && ch <= 'f')
v = 16 * (ch - 'a' + 10);
else
printf("%s:%d.%d Warning: Invalid character '%c' after \\x\n", it->filename, (int)it->line, (int)it->column, ch);
it_next(it);
ch = it->ch;
if ('0' <= ch && ch <= '9')
v += ch - '0';
else if ('A' <= ch && ch <= 'F')
v += ch - 'A' + 10;
else if ('a' <= ch && ch <= 'f')
v += ch - 'a' + 10;
else
printf("%s:%d.%d Warning: Invalid character '%c' after \\x\n", it->filename, (int)it->line, (int)it->column, ch);
ch = v;
it_next(it);
}
else if (ch == '\'' || ch == '"' || ch == '\\')
;
else
printf("%s:%d.%d Warning: Unknown escape sequence \\%c\n", it->filename, (int)it->line, (int)it->column, ch);
return ch;
}
#define MAX_TOKEN_LEN 6000
token_iterator_p tokenizer_next(token_iterator_p token_it, bool skip_nl)
{
tokenizer_p tokenizer = (tokenizer_p)token_it;
tokenizer_skip_white_space(tokenizer, skip_nl);
char_iterator_p it = tokenizer->_char_iterator;
char_next_p it_next; it_next = it->next;
int i = 0;
char ch = it->ch;
tokenizer->base.kind = 0;
if (ch == 0)
{
goto done;
}
bool at_start_of_line = token_it->filename != tokenizer->_char_iterator->filename
|| token_it->line != tokenizer->_char_iterator->line;
token_it->filename = it->filename;
token_it->line = it->line;
token_it->column = it->column;
if (ch == '\n')
{
token_it->kind = '\n';
}
else if (ch == '#' && at_start_of_line)
{
token_it->token[i] = '#'; i = i + 1; it_next(it);
tokenizer_skip_white_space(tokenizer, TRUE);
ch = it->ch;
while ('a' <= ch && ch <= 'z')
{
token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
}
token_it->token[i] = '\0';
if (eqstr("#else", token_it->token)) token_it->kind = TK_H_ELSE;
else if (eqstr("#elif", token_it->token)) token_it->kind = TK_H_ELIF;
else if (eqstr("#endif", token_it->token)) token_it->kind = TK_H_ENDIF;
else if (eqstr("#define", token_it->token)) token_it->kind = TK_H_DEFINE;
else if (eqstr("#if", token_it->token)) token_it->kind = TK_H_IF;
else if (eqstr("#ifdef", token_it->token)) token_it->kind = TK_H_IFDEF;
else if (eqstr("#ifndef", token_it->token)) token_it->kind = TK_H_IFNDEF;
else if (eqstr("#include", token_it->token)) token_it->kind = TK_H_INCLUDE;
else if (eqstr("#undef", token_it->token)) token_it->kind = TK_H_UNDEF;
else if (eqstr("#error", token_it->token)) token_it->kind = TK_H_ERROR;
}
else if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || ch == '_')
{
token_it->kind = 'i';
token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
while (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || ('0' <= ch && ch <= '9') || ch == '_')
{
token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
}
token_it->token[i] = '\0';
if (eqstr("break", token_it->token)) token_it->kind = TK_BREAK;
else if (eqstr("case", token_it->token)) token_it->kind = TK_CASE;
else if (eqstr("char", token_it->token)) token_it->kind = TK_CHAR;
else if (eqstr("continue", token_it->token)) token_it->kind = TK_CONTINUE;
else if (eqstr("const", token_it->token)) token_it->kind = TK_CONST;
else if (eqstr("default", token_it->token)) token_it->kind = TK_DEFAULT;
else if (eqstr("defined", token_it->token)) token_it->kind = TK_DEFINED;
else if (eqstr("do", token_it->token)) token_it->kind = TK_DO;
else if (eqstr("double", token_it->token)) token_it->kind = TK_DOUBLE;
else if (eqstr("else", token_it->token)) token_it->kind = TK_ELSE;
else if (eqstr("enum", token_it->token)) token_it->kind = TK_ENUM;
else if (eqstr("extern", token_it->token)) token_it->kind = TK_EXTERN;
else if (eqstr("float", token_it->token)) token_it->kind = TK_FLOAT;
else if (eqstr("for", token_it->token)) token_it->kind = TK_FOR;
else if (eqstr("goto", token_it->token)) token_it->kind = TK_GOTO;
else if (eqstr("if", token_it->token)) token_it->kind = TK_IF;
else if (eqstr("inline", token_it->token)) token_it->kind = TK_INLINE;
else if (eqstr("int", token_it->token)) token_it->kind = TK_INT;
else if (eqstr("long", token_it->token)) token_it->kind = TK_LONG;
else if (eqstr("return", token_it->token)) token_it->kind = TK_RETURN;
else if (eqstr("short", token_it->token)) token_it->kind = TK_SHORT;
else if (eqstr("sizeof", token_it->token)) token_it->kind = TK_SIZEOF;
else if (eqstr("static", token_it->token)) token_it->kind = TK_STATIC;
else if (eqstr("struct", token_it->token)) token_it->kind = TK_STRUCT;
else if (eqstr("switch", token_it->token)) token_it->kind = TK_SWITCH;
else if (eqstr("typedef", token_it->token)) token_it->kind = TK_TYPEDEF;
else if (eqstr("union", token_it->token)) token_it->kind = TK_UNION;
else if (eqstr("unsigned", token_it->token)) token_it->kind = TK_UNSIGNED;
else if (eqstr("void", token_it->token)) token_it->kind = TK_VOID;
else if (eqstr("while", token_it->token)) token_it->kind = TK_WHILE;
}
else if ('0' <= ch && ch <= '9')
{
token_it->kind = '0';
if (ch == '0')
{
token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
if (ch == 'x')
{
token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
while (('0' <= ch && ch <= '9') || ('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F'))
{
token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
}
}
else
{
while ('0' <= ch && ch <= '7')
{
token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
}
}
}
else
{
while ('0' <= ch && ch <= '9')
{
token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
}
}
if (ch == 'U')
{
token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
}
while (ch == 'L')
{
token_it->token[i] = ch; i = i + 1; it_next(it); ch = it->ch;
}
}
else if (ch == '\'')
{
token_it->kind = ch;
it_next(it);
token_it->token[0] = tokenizer_parse_char_literal(tokenizer);
i = 1;
if (it->ch == '\'')
{
it_next(it);
}
}
else if (ch == '"')
{
token_it->kind = ch; it_next(it); ch = it->ch;
while (ch != '\0' && ch != '\n' && ch != '"')
{
if (i == MAX_TOKEN_LEN)
{
fprintf(stderr, "MAX_TOKEN_LEN %d exceeded\n", i);
exit(-1);
}
token_it->token[i] = tokenizer_parse_char_literal(tokenizer);
i++;
ch = it->ch;
}
if (ch == '"')
{
it_next(it);
}
}
else
{
token_it->kind = ch;
token_it->token[0] = ch;
i = 1;
if (ch == '#')
{
it_next(it);
if (it->ch == '#')
{
it_next(it);
token_it->kind = TK_D_HASH;
token_it->token[1] = '#';
i = 2;
}
}
else if (ch == '=')
{
it_next(it);
if (it->ch == '=')
{
it_next(it);
token_it->kind = TK_EQ;
token_it->token[1] = '=';
i = 2;
}
}
else if (ch == '*' || ch == '/' || ch == '%' || ch == '^')
{
it_next(it);
if (it->ch == '=')
{
it_next(it);
token_it->kind = TK_ASS + ch;
token_it->token[1] = '=';
i = 2;
}
}
else if (ch == '-')
{
it_next(it); ch = it->ch;
if (ch == '-')
{
it_next(it);
token_it->kind = TK_DEC;
token_it->token[1] = ch;
i = 2;
}
else if (ch == '=')
{
it_next(it);
token_it->kind = TK_SUB_ASS;
token_it->token[1] = ch;
i = 2;
}
else if (ch == '>')
{
it_next(it);
token_it->kind = TK_ARROW;
token_it->token[1] = ch;
i = 2;
}
}
else if (ch == '+' || ch == '-')
{
it_next(it);
ch = it->ch;
if (ch == token_it->token[0] || ch == '=')
{
it_next(it);
token_it->token[1] = ch;
if (ch == '+')
{
token_it->kind = TK_INC;
}
else if (ch == '-')
{
token_it->kind = TK_DEC;
}
else
{
token_it->kind = TK_ASS + token_it->token[0];
}
i = 2;
}
}
else if (ch == '<' || ch == '>' || ch == '|' || ch == '&')
{
it_next(it);
if (it->ch == ch)
{
it_next(it);
token_it->kind = TK_DD_OPER + ch;
token_it->token[1] = ch;
i = 2;
}
if (it->ch == '=' && (ch == '<' || ch == '>' || ch == '&' || ch == '|'))
{
it_next(it);
if (i == 2)
{
token_it->kind = TK_ASS + ch;
}
else if (ch == '&')
{
token_it->kind = TK_BAND_ASS;
}
else if (ch == '|')
{
token_it->kind = TK_BOR_ASS;
}
else if (ch == '<')
{
token_it->kind = TK_LE;
}
else
{
token_it->kind = TK_GE;
}
token_it->token[i] = '=';
i = i + 1;
}
}
else if (ch == '!')
{
it_next(it);
if (it->ch == '=')
{
it_next(it);
token_it->kind = TK_NE;
token_it->token[1] = '=';
i = 2;
}
}
else if (ch == '.')
{
it_next(it);
if (it->ch == '.')
{
it_next(it);
token_it->kind = TK_DPERIOD;
token_it->token[1] = '.';
i = 2;
if (it->ch == '.')
{
it_next(it);
token_it->kind = TK_DASHES;
token_it->token[2] = '.';
i = 3;
}
}
}
else
{
it_next(it);
}
}
done:
token_it->token[i] = '\0';
token_it->length = i;
if (opt_trace_parser)
printf("tokenizer_next %d: %d '%s'\n", token_it->line, token_it->kind, token_it->token);
return token_it;
}
int string_int_value(const char *s)
{
int int_value = 0;
if (*s == '0')
{
s++;
if (*s == 'x')
{
s++;
while (1)
{
if ('0' <= *s && *s <= '9')
int_value = 16 * int_value + *s - '0';
else if ('a' <= *s && *s <= 'f')
int_value = 16 * int_value + *s - 'a' + 10;
else if ('A' <= *s && *s <= 'F')
int_value = 16 * int_value + *s - 'A' + 10;
else
break;
s++;
}
}
else
{
while ('0' <= *s && *s <= '7')
{
int_value = 8 * int_value + *s - '0';
s++;
}
}
}
else
{
while ('0' <= *s && *s <= '9')
{
int_value = 10 * int_value + *s - '0';
s++;
}
}
if (*s == 'U')
{
s++;
}
while (*s == 'L')
{
s++;
}
return int_value;
}
int token_it_int_value(token_iterator_p it)
{
return string_int_value(it->token);
}
tokenizer_p new_tokenizer(char_iterator_p char_iterator)
{
tokenizer_p tokenizer = malloc(sizeof(struct tokenizer_s));
tokenizer->_char_iterator = char_iterator;
tokenizer->base.token = malloc(MAX_TOKEN_LEN);
tokenizer->base.filename = NULL;
tokenizer->base.next = tokenizer_next;
return tokenizer;
}
// List of tokens
struct tokens_s
{
int kind;
char *token;
int length;
char *filename;
int line;
int column;
struct tokens_s* next;
};
typedef struct tokens_s* tokens_p;
tokens_p new_token(int kind)
{
tokens_p token = malloc(sizeof(struct tokens_s));
token->kind = kind;
token->token = 0;
token->length = 0;
token->filename = "<env>";
token->line = 0;
token->column = 0;
token->next = 0;
return token;
}
tokens_p new_int_token(const char *str)
{
tokens_p token = new_token('0');
token->token = copystr(str);
return token;
}
tokens_p new_str_token(char *str)
{
tokens_p token = new_token('"');
token->token = copystr(str);
token->length = strlen(str);
return token;
}
tokens_p new_token_from_it(token_iterator_p it)
{
tokens_p token = new_token(it->kind);
token->token = copystrlen(it->token, it->length);
token->length = it->length;
token->filename = it->filename;
token->line = it->line;
token->column = it->column;
return token;
}
// The enironment for defined symbols and macros
struct env_s {
char* name;
int nr_args;
char* args[10];
tokens_p tokens;
struct env_s* next;
};
typedef struct env_s env_t;
typedef struct env_s *env_p;
env_p environment = NULL;
env_p get_env(char* name, bool create)
{
env_p prev_env = NULL;
env_p env = environment;
while (env != NULL)
{
if (eqstr(env->name, name))
return env;
prev_env = env;
env = env->next;
}
if (!create)
return NULL;
env = malloc(sizeof(struct env_s));
env->name = copystr(name);
env->nr_args = 0;
env->tokens = NULL;
env->next = NULL;
if (prev_env == NULL)
{
environment = env;
}
else
{
prev_env->next = env;
}
return env;
}
void del_env(char* name)
{
env_p prev_env = NULL;
env_p env = environment;
while (env != 0)
{
if (eqstr(env->name, name))
{
if (prev_env == NULL)
{
environment = environment->next;
}
else
{
prev_env->next = env->next;
}
return;
}
prev_env = env;
env = env->next;
}
}
// The conditional iterator
// The conditional iterator deals with all conditional compilation
// directives, such as '#if', and also the directives
// `#define`, `#undef`, `#include`, and `#error`.
typedef struct conditional_iterator_s* conditional_iterator_p;
typedef int (*parse_expr_function_p)(conditional_iterator_p it);
struct conditional_iterator_s
{
token_iterator_t base;
include_iterator_p _source_it;
token_iterator_p _token_it;
parse_expr_function_p _parse_or_expr;
bool _skip_level;
bool _if_done[40];
int _if_level;
};
/*
conditional_primary
: '(' conditional_or_exp ')'
| 'defined' ( '(' ident ')' | ident )
| integer
| ident
.
*/
int conditional_iterator_parse_primary(conditional_iterator_p it)
{
token_next_p token_it_next = it->_token_it->next;
int result = 0;
if (it->_token_it->kind == '(')
{
token_it_next(it->_token_it, FALSE);
parse_expr_function_p parse_or_expr = it->_parse_or_expr;
result = parse_or_expr(it);
if (it->_token_it->kind == ')')
{
token_it_next(it->_token_it, FALSE);
}
}
else if (it->_token_it->kind == TK_DEFINED)
{
token_it_next(it->_token_it, FALSE);
if (it->_token_it->kind == '(')
{
token_it_next(it->_token_it, FALSE);
//printf("defined(%s) = %d\n", it->_token_it->token, get_env(it->_token_it->token, FALSE) != NULL);
if (get_env(it->_token_it->token, FALSE) != NULL)
{
result = 1;
}
token_it_next(it->_token_it, FALSE);
if (it->_token_it->kind == ')')
{
token_it_next(it->_token_it, FALSE);
}
}
else
{
if (get_env(it->_token_it->token, FALSE) != NULL)
{
result = 1;
}
token_it_next(it->_token_it, FALSE);
}
}
else if (it->_token_it->kind == '0')
{
result = token_it_int_value(it->_token_it);
token_it_next(it->_token_it, FALSE);
}
else if (it->_token_it->kind == 'i')
{
env_p env = get_env(it->_token_it->token, FALSE);
if (env != NULL && env->tokens != NULL && env->tokens->kind == '0')
{
result = string_int_value(env->tokens->token);
}
token_it_next(it->_token_it, FALSE);
}
return result;
}
/*
conditional_unary_expr
: '!' conditional_primary
| conditional_primary
.
*/
int conditional_iterator_parse_unary_expr(conditional_iterator_p it)
{
token_next_p token_it_next = it->_token_it->next;
if (it->_token_it->kind == '!')
{
token_it_next(it->_token_it, FALSE);
int result = conditional_iterator_parse_primary(it);
return !result; //!conditional_iterator_parse_primary(it);
}
return conditional_iterator_parse_primary(it);
}
/*
conditional_compare_expr
: conditional_unary_expr
('==' conditional_unary_expr
|'!=' conditional_unary_expt ) OPT
.
*/
int conditional_iterator_parse_compare_expr(conditional_iterator_p it)
{
token_next_p token_it_next = it->_token_it->next;
int value = conditional_iterator_parse_unary_expr(it);
if (it->_token_it->kind == TK_EQ)
{
token_it_next(it->_token_it, FALSE);
return value == conditional_iterator_parse_unary_expr(it);
}
if (it->_token_it->kind == TK_NE)
{
token_it_next(it->_token_it, FALSE);
return value != conditional_iterator_parse_unary_expr(it);
}
return value;
}
/*
conditional_and_expr : conditional_compare_expr CHAIN '&&' .
*/
int conditional_iterator_parse_and_expr(conditional_iterator_p it)
{
token_next_p token_it_next = it->_token_it->next;
int value = conditional_iterator_parse_compare_expr(it);
while (it->_token_it->kind == TK_AND)
{
token_it_next(it->_token_it, FALSE);
int value2 = conditional_iterator_parse_compare_expr(it);
value = value && value2;
}
return value;
}
/*
conditional_or_expr : conditional_and_expr CHAIN '||' .
*/
int conditional_iterator_parse_or_expr(conditional_iterator_p it)
{
token_next_p token_it_next = it->_token_it->next;
int value = conditional_iterator_parse_and_expr(it);
while (it->_token_it->kind == TK_OR)
{
token_it_next(it->_token_it, FALSE);
int value2 = conditional_iterator_parse_and_expr(it);
value = value || value2;
}
return value;
}
char *include_path = 0;
char *end_include_prefix = 0;
token_iterator_p conditional_iterator_next(token_iterator_p token_it, bool dummy)
{
conditional_iterator_p it = (conditional_iterator_p)token_it;
//printf("conditional_iterator_next\n");
token_next_p token_it_next = it->_token_it->next;
int kind;
int value = 0;
tokens_p prev_token;
env_p env;
tokens_p token;
file_iterator_p input_it;
line_splice_iterator_p splice_it;
comment_strip_iterator_p comment_it;
token_it_next(it->_token_it, TRUE);
while (TRUE)
{
//if (it->_token_it->token[0] == '#')
// printf("%s.%d %s (%d)\n", it->_token_it->filename, it->_token_it->line, it->_token_it->token, it->_skip_level);
kind = it->_token_it->kind;
if (it->_skip_level > 0)
{
if (kind == TK_H_IF || kind == TK_H_IFDEF || kind == TK_H_IFNDEF)
{
it->_skip_level = it->_skip_level + 1;
}
else if (kind == TK_H_ENDIF)
{
it->_skip_level = it->_skip_level - 1;
if (it->_skip_level == 0)
{
it->_if_level = it->_if_level - 1;
}
}
else if (kind == TK_H_ELSE)
{
if (it->_skip_level == 1)
{
if (it->_if_done[it->_if_level] == FALSE)
{
it->_skip_level = 0;
}
}
}
else if (kind == TK_H_ELIF)
{
token_it_next(it->_token_it, FALSE);
value = conditional_iterator_parse_or_expr(it);
if (it->_skip_level == 1)
{
if (it->_if_done[it->_if_level] == FALSE)
{
token_it_next(it->_token_it, FALSE);
if (value)
{
it->_skip_level = 0;
it->_if_done[it->_if_level] = TRUE;
}
}
}
}
token_it_next(it->_token_it, TRUE);
}
else if (kind == TK_H_IFDEF || kind == TK_H_IFNDEF)
{
token_it_next(it->_token_it, TRUE);
it->_if_level = it->_if_level + 1;
if (it->_token_it->kind == 'i')
{
//int defined = value = get_env(it->_token_it->token, FALSE) != 0;
//printf("for %s is defined %d\n", it->_token_it->token, defined);
if ((get_env(it->_token_it->token, FALSE) != 0) == (kind == TK_H_IFDEF))
{
it->_if_done[it->_if_level] = TRUE;
}
else
{
it->_if_done[it->_if_level] = FALSE;
it->_skip_level = 1;
}
token_it_next(it->_token_it, TRUE);
}
}
else if (kind == TK_H_IF)
{
token_it_next(it->_token_it, TRUE);
it->_if_level = it->_if_level + 1;
if (conditional_iterator_parse_or_expr(it))
{
it->_if_done[it->_if_level] = TRUE;
}
else
{
it->_if_done[it->_if_level] = FALSE;
it->_skip_level = 1;
}
token_it_next(it->_token_it, TRUE);
}
else if (kind == TK_H_ELSE || kind == TK_H_ELIF)
{
it->_skip_level = 1;
while (it->_token_it->kind == '\n')
{
token_it_next(it->_token_it, FALSE);
}
token_it_next(it->_token_it, TRUE);
}
else if (kind == TK_H_ENDIF)
{
it->_if_level = it->_if_level - 1;
token_it_next(it->_token_it, TRUE);
}
else if (kind == TK_H_DEFINE)
{
prev_token = NULL;
token_it_next(it->_token_it, FALSE);
env = get_env(it->_token_it->token, TRUE);
if (it->_source_it->base.ch == '(')
{
token_it_next(it->_token_it, FALSE);
while (TRUE)
{
token_it_next(it->_token_it, FALSE);
env->args[env->nr_args] = copystr(it->_token_it->token);
env->nr_args = env->nr_args + 1;
token_it_next(it->_token_it, FALSE);
if (it->_token_it->kind != ',')
{
break;
}
}
if (it->_token_it->kind == ')')
{
token_it_next(it->_token_it, FALSE);
}
}
else
{
token_it_next(it->_token_it, FALSE);
}
while (it->_token_it->kind != '\n')
{
token = new_token_from_it(it->_token_it);
if (prev_token == NULL)
{
env->tokens = token;
}
else
{
prev_token->next = token;
}
prev_token = token;
token_it_next(it->_token_it, FALSE);
}
token_it_next(it->_token_it, TRUE);
}
else if (kind == TK_H_UNDEF)
{
token_it_next(it->_token_it, TRUE);
del_env(it->_token_it->token);
token_it_next(it->_token_it, TRUE);
}
else if (kind == TK_H_INCLUDE)
{
token_it_next(it->_token_it, TRUE);
if (it->_token_it->kind == '"')
{
strcpy(end_include_prefix, it->_token_it->token);
while (it->_token_it->kind != '\n')
{
token_it_next(it->_token_it, FALSE);
}
//printf("INCLUDE '%s'\n", include_path);
input_it = new_file_iterator(include_path);
if (input_it->base.ch != 0)
{
splice_it = new_line_splice_iterator(&input_it->base);
comment_it = new_comment_strip_iterator(&splice_it->base);
include_iterator_add(it->_source_it, &comment_it->base);
token_it_next(it->_token_it, TRUE);
}
else
{
token_it_next(it->_token_it, TRUE);
}
}
else
{
while (it->_token_it->kind != '\n')
{
token_it_next(it->_token_it, FALSE);
}
token_it_next(it->_token_it, TRUE);
}
}
else if (kind == TK_H_ERROR)
{
it->base.kind = it->_token_it->kind;
it->base.token = it->_token_it->token;
it->base.length = it->_token_it->length;
it->base.filename = it->_token_it->filename;
it->base.line = it->_token_it->line;
it->base.column = it->_token_it->column;
return token_it;
}
else
{
it->base.kind = it->_token_it->kind;
it->base.token = it->_token_it->token;
it->base.length = it->_token_it->length;
it->base.filename = it->_token_it->filename;
it->base.line = it->_token_it->line;
it->base.column = it->_token_it->column;
return token_it;
}
}
return token_it;
}
conditional_iterator_p new_conditional_iterator(include_iterator_p source_it, token_iterator_p token_it)
{
conditional_iterator_p it = malloc(sizeof(struct conditional_iterator_s));
it->_source_it = source_it;
it->_token_it = token_it;
it->_parse_or_expr = conditional_iterator_parse_or_expr;
it->_skip_level = 0;
it->_if_level = 0;
it->base.next = conditional_iterator_next;
return it;
}
// The expand macro iterator
// This iterator implements the expansion of a macro with a list
// of tokens for the arguments. It also implements processing of
// the '#' and `##` operators during expansion. After expansion
// has been completed, it returns the token iterator for the
// remaining part.
#define APPENDED_TOKEN_LEN 50
typedef struct expand_macro_iterator_s* expand_macro_iterator_p;
struct expand_macro_iterator_s
{
token_iterator_t base;
tokens_p param_tokens;
tokens_p tokens;
token_iterator_p _rest_it;
bool stringify;
char appended_token[APPENDED_TOKEN_LEN];
env_p _macro;
tokens_p args[10];
};
token_iterator_p expand_macro_iterator_next(token_iterator_p token_it, bool dummy)
{
expand_macro_iterator_p it = (expand_macro_iterator_p)token_it;
if (it->param_tokens != 0)
{
token_it->kind = it->stringify ? '"' : it->param_tokens->kind;
token_it->token = it->param_tokens->token;
token_it->length = it->param_tokens->length;
token_it->filename = it->param_tokens->filename;
token_it->line = it->param_tokens->line;
token_it->column = it->param_tokens->column;
if (opt_trace_parser)
printf("token from arg %d %s\n", token_it->kind, token_it->token == 0 ? "?" : token_it->token);
it->param_tokens = it->param_tokens->next;
return token_it;
}
for (;;)
{
tokens_p token = it->tokens;
if (token == 0)
{
token_iterator_p rest_it = it->_rest_it;
free(it);
return rest_it->next(rest_it, dummy);
}
if (opt_trace_parser)
printf("token from macro %d %s\n", token->kind, token->token == 0 ? "?" : token->token);
it->tokens = token->next;
it->stringify = FALSE;
if (token->next != NULL && token->next->kind == TK_D_HASH)
{
token_it->kind = 'i';
token_it->filename = token->filename;
token_it->line = token->line;
token_it->column = token->column;
int p = 0;
for (;;)
{
const char *s = token->token;
if (token->kind == 'i')
{
int nr_args = it->_macro->nr_args;
int i = 0;
for (; i < nr_args; i++)
if (strcmp(token->token, it->_macro->args[i]) == 0)
break;
if (i < nr_args)
{
tokens_p tokens = it->args[i];
if (tokens == NULL)
{
if (opt_trace_parser)
printf("INFO: append arg no value\n");
s = "";
}
else if (tokens->next != NULL)
{
printf("ERROR: append arg more than one value\n");
s = "";
}
else
s = tokens->token;
}
}
for (; *s != '\0'; s++)
if (p < APPENDED_TOKEN_LEN - 1)
it->appended_token[p++] = *s;
token = token->next;
if (token == NULL || token->kind != TK_D_HASH)
break;
token = token->next;
}
it->tokens = token;
it->appended_token[p] = '\0';
if (opt_trace_parser)
printf("INFO: Appended token '%s'\n", it->appended_token);
token_it->token = it->appended_token;
token_it->length = p;
return token_it;
}
else
{
if (token->kind == '#')
{
it->stringify = TRUE;
it->tokens = token = token->next;
if (it->tokens == 0)
return it->_rest_it->next(it->_rest_it, dummy);
}
if (token->kind == 'i')
{
int nr_args = it->_macro->nr_args;
int i = 0;
for (; i < nr_args; i++)
if (strcmp(token->token, it->_macro->args[i]) == 0)
break;
if (i < nr_args)
{
tokens_p tokens = it->args[i];
if (tokens == 0)
continue;
token_it->kind = it->stringify ? '"' : tokens->kind;
token_it->token = tokens->token;
token_it->length = tokens->length;
token_it->filename = tokens->filename;
token_it->line = tokens->line;
token_it->column = token->column;
it->param_tokens = tokens->next;
it->tokens = token->next;
return token_it;
}
}
token_it->kind = it->stringify ? '"' : token->kind;
token_it->token = token->token;
token_it->length = token->length;
token_it->filename = token->filename;
token_it->line = token->line;
token_it->column = token->column;
return token_it;
}
}
}
token_iterator_p new_exapnd_macro_iterator(env_p macro, tokens_p *args, token_iterator_p rest_it)
{
expand_macro_iterator_p it = malloc(sizeof(struct expand_macro_iterator_s));
it->base.next = expand_macro_iterator_next;
it->param_tokens = NULL;
it->tokens = macro->tokens;
it->_rest_it = rest_it;
it->_macro = macro;
for (int arg_nr = 0; arg_nr < macro->nr_args; arg_nr++)
it->args[arg_nr] = args[arg_nr];
return expand_macro_iterator_next(&it->base, FALSE);
}
// The expand iterator
// This iterator takes care of expanding all defined symbols and macros.
// For the expansion of these the expand macro iterator is used.
typedef struct expand_iterator_s* expand_iterator_p;
struct expand_iterator_s
{
token_iterator_t base;
token_iterator_p _source_it;
};
token_iterator_p expand_iterator_next(token_iterator_p token_it, bool dummy)
{
expand_iterator_p it = (expand_iterator_p)token_it;
token_iterator_p source_it = it->_source_it;
source_it = source_it->next(source_it, dummy);
for (bool go = TRUE; go;)
{
go = FALSE;
if (source_it->kind == 'i')
{
env_p macro = get_env(source_it->token, FALSE);
if (macro != NULL)
{
go = TRUE;
if (opt_trace_parser)
printf("Expand token %s %d: ", source_it->token, macro->nr_args);
tokens_p args[10];
int nr_args = 0;
if (macro->nr_args > 0)
{
source_it = source_it->next(source_it, dummy);
if (source_it->kind != '(')
{
printf("ERROR: No arguments for %s when parameters (%d) are expected\n", macro->name, macro->nr_args);
continue;
}
do
{
source_it = source_it->next(source_it, dummy);
args[nr_args] = NULL;
tokens_p *ref_tokens = &args[nr_args];
nr_args++;
char stack[20];
int stack_depth = 0;
while (stack_depth > 0 || (source_it->kind != 0 && source_it->kind != ',' && source_it->kind != ')'))
{
*ref_tokens = new_token_from_it(source_it);
ref_tokens = &(*ref_tokens)->next;
if (source_it->kind == '(')
stack[stack_depth++] = ')';
else if (source_it->kind == '{')
stack[stack_depth++] = '}';
else if (source_it->kind == '[')
stack[stack_depth++] = ']';
else if (stack_depth > 0 && source_it->kind == stack[stack_depth - 1])
stack_depth--;
source_it = source_it->next(source_it, dummy);
}
}
while (source_it->kind == ',');
}
if (macro->nr_args != nr_args)
{
printf("ERROR: Number arguments (%d) for %s does not match parameters (%d)\n", nr_args, macro->name, macro->nr_args);
source_it = source_it->next(source_it, dummy);
}
else if (macro->tokens == NULL)
source_it = source_it->next(source_it, dummy);
else
source_it = new_exapnd_macro_iterator(macro, args, source_it);
}
}
it->_source_it = source_it;
}
token_it->kind = source_it->kind;
token_it->token = source_it->token;
token_it->length = source_it->length;
token_it->filename = source_it->filename;
token_it->line = source_it->line;
token_it->column = source_it->column;
return token_it;
}
expand_iterator_p new_expand_iterator(token_iterator_p source_it)
{
expand_iterator_p it = malloc(sizeof(struct expand_iterator_s));
it->_source_it = source_it;
it->base.next = expand_iterator_next;
return it;
}
token_iterator_p token_it = NULL;
// Output the C-preprocessor output.
void output_preprocessor(const char *filename)
{
FILE *fout = fopen(filename, "w");
if (fout == NULL)
return;
token_it = token_it->next(token_it, TRUE);
char *prev_file = 0;
int prev_line = 0;
while (token_it->kind != 0)
{
if (token_it->filename != prev_file || token_it->line != prev_line)
{
fprintf(fout, "\n%s: %d", token_it->filename, token_it->line);
for (int i = 0; i < token_it->column; i++)
fputc(' ', fout);
prev_file = token_it->filename;
prev_line = token_it->line;
}
fputc(' ', fout);
if (token_it->kind == 'i')
{
fputs(token_it->token, fout);
}
else if (token_it->kind == '"' || token_it->kind == '\'')
{
char strsep = token_it->kind;
fputc(strsep, fout);
for (int i = 0; i < token_it->length ; i = i + 1)
{
char ch = token_it->token[i];
if (ch == '\n')
fputs("\\n", fout);
else if (ch == '\r')
fputs("\\r", fout);
else if (ch == '\t')
fputs("\\t", fout);
else if (ch == '\0')
fputs("\\0", fout);
else if (' ' <= ch && ch < 127)
fputc(ch, fout);
else
{
fputs("\\", fout);
fputc(ch, fout);
}
}
fputc(strsep, fout);
}
else if (token_it->kind == '0')
{
fputs(token_it->token, fout);
}
else if (token_it->kind < 127)
{
fputc(token_it->kind, fout);
}
else if (token_it->kind >= TK_KEYWORD)
fputs(token_it->token, fout);
else if (token_it->kind == TK_D_HASH) fputs("##", fout);
else if (token_it->kind == TK_EQ) fputs("==", fout);
else if (token_it->kind == TK_NE) fputs("!=", fout);
else if (token_it->kind == TK_LE) fputs("<=", fout);
else if (token_it->kind == TK_GE) fputs(">=", fout);
else if (token_it->kind == TK_INC) fputs("++", fout);
else if (token_it->kind == TK_DEC) fputs("--", fout);
else if (token_it->kind == TK_ARROW) fputs("->", fout);
else if (token_it->kind == TK_MUL_ASS) fputs("*=", fout);
else if (token_it->kind == TK_DIV_ASS) fputs("/=", fout);
else if (token_it->kind == TK_MOD_ASS) fputs("%%=", fout);
else if (token_it->kind == TK_ADD_ASS) fputs("+=", fout);
else if (token_it->kind == TK_SUB_ASS) fputs("-=", fout);
else if (token_it->kind == TK_SHL_ASS) fputs("<<=", fout);
else if (token_it->kind == TK_SHR_ASS) fputs(">>=", fout);
else if (token_it->kind == TK_XOR_ASS) fputs("^=", fout);
else if (token_it->kind == TK_BAND_ASS) fputs("&=", fout);
else if (token_it->kind == TK_BOR_ASS) fputs("|=", fout);
else if (token_it->kind == TK_SHL) fputs("<<", fout);
else if (token_it->kind == TK_SHR) fputs(">>", fout);
else if (token_it->kind == TK_AND) fputs("&&", fout);
else if (token_it->kind == TK_OR) fputs("||", fout);
else fputs("????", fout);
token_it = token_it->next(token_it, TRUE);
}
fprintf(fout, "\n\nDone\n");
fclose(fout);
}
// Types
#define BT_UNSIGNED_INT (1)
#define BT_SIGNED_INT (1 | 2)
#define BT_TYPE(X) ((X) << 2)
#define BT_GET_TYPE(X) ((X) >> 2)
typedef enum
{
BT_VOID = 0,
BT_S8 = BT_SIGNED_INT | BT_TYPE(1),
BT_U8 = BT_UNSIGNED_INT | BT_TYPE(1),
BT_S16 = BT_SIGNED_INT | BT_TYPE(2),
BT_U16 = BT_UNSIGNED_INT | BT_TYPE(2),
BT_S32 = BT_SIGNED_INT | BT_TYPE(3),
BT_U32 = BT_UNSIGNED_INT | BT_TYPE(3),
BT_S64 = BT_SIGNED_INT | BT_TYPE(4),
BT_U64 = BT_UNSIGNED_INT | BT_TYPE(4),
BT_F = BT_SIGNED_INT | BT_TYPE(5), // Treat float and double as integer
BT_DF = BT_SIGNED_INT | BT_TYPE(6),
BT_JMP_BUF = BT_TYPE(7),
BT_FILE = BT_TYPE(8),
BT_TIME_T = BT_TYPE(9),
} base_type_e;
typedef enum
{
TYPE_KIND_BASE,
TYPE_KIND_STRUCT,
TYPE_KIND_UNION,
TYPE_KIND_POINTER,
TYPE_KIND_ARRAY,
TYPE_KIND_FUNCTION,
} type_kind_e;
typedef struct decl_s *decl_p;
typedef struct type_s *type_p;
struct type_s
{
type_kind_e kind;
base_type_e base_type;
int size;
int nr_members; // TYPE_KIND_STRUCT or TYPE_KIND_UNION
type_p *members;
int nr_decls; // TYPE_KIND_FUNCTION
decl_p *decls;
int nr_elems; // TYPE_KIND_ARRAY
decl_p typedef_decl;
};
type_p new_type(type_kind_e kind, int size, int nr_members)
{
type_p type = (type_p)malloc(sizeof(struct type_s));
type->kind = kind;
type->base_type = 0;
type->size = size;
type->nr_members = nr_members;
if (nr_members > 0)
{
type->members = (type_p*)malloc(nr_members * sizeof(type_p));
for (int i = 0; i < nr_members; i++)
type->members[i] = NULL;
}
else
type->members = NULL;
type->nr_decls = 0;
type->decls = NULL;
type->nr_elems = 0;
type->typedef_decl = NULL;
return type;
}
bool type_is_integer(type_p type)
{
return type != NULL && type->kind == TYPE_KIND_BASE && (type->base_type & 1) == 1;
}
bool type_is_signed_integer(type_p type)
{
return type != NULL && type->kind == TYPE_KIND_BASE && (type->base_type & 3) == 3;
}
bool type_is_pointer(type_p type)
{
return type != NULL && (type->kind == TYPE_KIND_POINTER || type->kind == TYPE_KIND_ARRAY);
}
void type_set_decls(type_p type, int nr_decls, decl_p* decls)
{
if (nr_decls >= type->nr_decls)
{
type->nr_decls = nr_decls;
type->decls = (decl_p*)malloc(nr_decls * sizeof(decl_p));
}
for (int i = 0; i < nr_decls; i++)
type->decls[i] = decls[i];
}
type_p base_type_void = NULL;
type_p base_type_S8 = NULL;
type_p base_type_U8 = NULL;
type_p base_type_S16 = NULL;
type_p base_type_U16 = NULL;
type_p base_type_S32 = NULL;
type_p base_type_U32 = NULL;
type_p base_type_S64 = NULL;
type_p base_type_U64 = NULL;
type_p base_type_float = NULL;
type_p base_type_double = NULL;
type_p base_type_jmp_buf = NULL;
type_p base_type_file = NULL;
type_p base_type_time_t = NULL;
type_p base_type_bool = NULL;
type_p type_char_ptr = NULL;
type_p new_base_type(base_type_e base)
{
int size = 4;
switch (BT_GET_TYPE(base))
{
case 1: size = 1; break;
case 2: size = 2; break;
case 3: size = 4; break;
case 4: size = 4; break; // Map int 64 to int 32
case 5: size = 4; break; // Map float to int 32
case 6: size = 4; break; // Map float to int 32
}
type_p type = new_type(TYPE_KIND_BASE, size, 0);
type->base_type = base;
return type;
}
void define_base_types(void)
{
base_type_void = new_base_type(BT_VOID);
base_type_S8 = new_base_type(BT_S8);
base_type_U8 = new_base_type(BT_U8);
base_type_S16 = new_base_type(BT_S16);
base_type_U16 = new_base_type(BT_U16);
base_type_S32 = new_base_type(BT_S32);
base_type_U32 = new_base_type(BT_U32);
base_type_S64 = new_base_type(BT_S64);
base_type_U64 = new_base_type(BT_U64);
base_type_float = new_base_type(BT_F);
base_type_double = new_base_type(BT_DF);
base_type_jmp_buf = new_base_type(BT_JMP_BUF);
base_type_file = new_base_type(BT_FILE);
base_type_time_t = new_base_type(BT_TIME_T);
base_type_bool = new_base_type(BT_U32);
type_char_ptr = new_type(TYPE_KIND_POINTER, 4, 1);
type_char_ptr->members[0] = base_type_S8;
}
type_p base_signed_type(type_p int_type)
{
if (int_type == base_type_U8)
return base_type_S8;
if (int_type == base_type_U16)
return base_type_S16;
if (int_type == base_type_U32)
return base_type_S32;
if (int_type == base_type_U64)
return base_type_S64;
return int_type;
}
// Expressions
#define LOCATION_IN_EXPR
// The expression kind uses the token type or one of the following:
#define OPER_POST_INC 2000
#define OPER_POST_DEC 2001
#define OPER_PRE_INC 2002
#define OPER_PRE_DEC 2003
#define OPER_PLUS 2004
#define OPER_MIN 2005
#define OPER_STAR 2006
#define OPER_ADDR 2007
typedef struct expr_s *expr_p;
struct expr_s
{
int kind;
int int_val;
char *str_val;
type_p type;
#ifdef LOCATION_IN_EXPR
const char *filename;
int line;
int column;
#endif
int nr_children;
expr_p children[0];
};
char token_it_pos_buffer[101];
const char *token_it_pos(void)
{
snprintf(token_it_pos_buffer, 100, "%s: %d.%d", token_it->filename, token_it->line, token_it->column);
token_it_pos_buffer[100] = '\0';
return token_it_pos_buffer;
}
#ifdef LOCATION_IN_EXPR
const char *filename_for_expr;
int line_for_expr;
int column_for_expr;
void store_pos_for_expr(void)
{
filename_for_expr = token_it->filename;
line_for_expr = token_it->line;
column_for_expr = token_it->column;
}
static char expr_pos_buffer[101];
const char *expr_pos(expr_p expr)
{
if (expr->kind > ' ' && expr->kind < 127)
snprintf(expr_pos_buffer, 100, "%s: %d.%d expr '%c ", expr->filename, expr->line, expr->column, expr->kind);
else
snprintf(expr_pos_buffer, 100, "%s: %d.%d expr %d ", expr->filename, expr->line, expr->column, expr->kind);
expr_pos_buffer[100] = '\0';
return expr_pos_buffer;
}
#else
void store_pos_for_expr(void) {}
const char *expr_pos(expr_p expr) {
static char buffer[101];
if (expr->kind > ' ' && expr->kind < 127)
snprintf(buffer, 100, "%sexpr '%c ", token_pos(), expr->kind);
else
snprintf(buffer, 100, "%s expr %d ", token_pos(), expr->kind);
buffer[100] = '\0';
return buffer;
}
#endif
expr_p new_expr(int kind, int nr_children)
{
expr_p expr = (expr_p)malloc(sizeof(struct expr_s) + nr_children * sizeof(expr_p));
expr->kind = kind;
expr->int_val = 0;
expr->str_val = NULL;
expr->nr_children = nr_children;
for (int i = 0; i < nr_children; i++)
expr->children[i] = NULL;
expr->type = NULL;
#ifdef LOCATION_IN_EXPR
expr->filename = filename_for_expr;
expr->line = line_for_expr;
expr->column = column_for_expr;
#endif
return expr;
}
expr_p new_expr_int_value(int value)
{
expr_p expr = new_expr('0', 0);
expr->int_val = value;
expr->type = base_type_S32;
return expr;
}
bool expr_is_pointer_size_gt_1(expr_p expr)
{
return type_is_pointer(expr->type) && expr->type->members[0]->size > 1;
}
int expr_inc_dec_value(expr_p expr)
{
return type_is_pointer(expr->type) ? expr->type->members[0]->size : 1;
}
void expr_print(FILE *f, expr_p expr)
{
if (expr == NULL)
{
fprintf(f, "NULL");
return;
}
if (' ' < expr->kind && expr->kind < 127)
fprintf(f, "%c(", expr->kind);
else
fprintf(f, "%d(", expr->kind);
for (int i = 0; i < expr->nr_children; i++)
{
if (i > 0)
fprintf(f, ", ");
expr_print(f, expr->children[i]);
}
fprintf(f, ")");
}
// Declarations
typedef enum {
DK_IDENT,
DK_STRUCT,
DK_UNION,
DK_ENUM,
} decl_kind_e;
typedef enum {
ST_NONE,
ST_STATIC,
ST_TYPEDEF,
ST_CONST,
} storage_type_e;
struct decl_s
{
decl_kind_e kind;
char *name;
type_p type;
storage_type_e storage_type;
expr_p value;
int pos;
int su_nr;
decl_p prev;
};
bool trace_decls = FALSE;
decl_p cur_ident_decls = NULL;
decl_p cur_decls = NULL;
decl_p add_decl(decl_kind_e kind, const char *name, type_p type)
{
if (trace_decls)
{
printf("add_decl '%s' %d", name, kind);
if (type != NULL)
printf(" Type %d", type->kind);
printf("\n");
}
decl_p decl = (decl_p)malloc(sizeof(struct decl_s));
decl->kind = kind;
decl->name = copystr(name);
decl->type = type;
decl->storage_type = ST_NONE;
decl->value = NULL;
decl->pos = 0;
decl->su_nr = 0;
if (kind == DK_IDENT)
{
decl->prev = cur_ident_decls;
cur_ident_decls = decl;
}
else
{
decl->prev = cur_decls;
cur_decls = decl;
}
return decl;
}
void remove_decl(decl_p decl)
{
for (decl_p *ref_decl = &cur_decls; *ref_decl != 0; ref_decl = &(*ref_decl)->prev)
if (*ref_decl == decl)
{
*ref_decl = (*ref_decl)->prev;
break;
}
}
void add_decl_clone(decl_p decl)
{
decl_p decl_clone = add_decl(decl->kind, decl->name, decl->type);
decl_clone->storage_type = decl->storage_type;
}
decl_p find_decl(decl_kind_e kind, char *name)
{
for (decl_p decls = kind == DK_IDENT ? cur_ident_decls : cur_decls; decls != NULL; decls = decls->prev)
if (strcmp(decls->name, name) == 0)
return decls;
return NULL;
}
decl_p find_or_add_decl(decl_kind_e kind, char *name)
{
decl_p decl = find_decl(kind, name);
if (decl != NULL)
return decl;
return add_decl(kind, name, NULL);
}
// Labels
typedef struct label_s *label_p;
struct label_s
{
char *name;
label_p next;
};
label_p cur_labels = NULL;
label_p find_label(const char *name)
{
for (label_p label = cur_labels; label != NULL; label = label->next)
if (strcmp(label->name, name) == 0)
return label;
return NULL;
}
label_p find_or_add_label(const char *name)
{
label_p label = find_label(name);
if (label != NULL)
return label;
label = (label_p)malloc(sizeof(struct label_s));
label->name = copystr(name);
label->next = cur_labels;
cur_labels = label;
return label;
}
// Eval expression
int expr_eval(expr_p expr)
{
switch (expr->kind)
{
case '0': return expr->int_val;
case '+': return expr_eval(expr->children[0]) + expr_eval(expr->children[1]);
case '-': return expr_eval(expr->children[0]) - expr_eval(expr->children[1]);
case '/': return expr_eval(expr->children[0]) / expr_eval(expr->children[1]);
case '|': return expr_eval(expr->children[0]) | expr_eval(expr->children[1]);
case OPER_MIN: return -expr_eval(expr->children[0]);
case TK_SHL: return expr_eval(expr->children[0]) << expr_eval(expr->children[1]);
case 'i':
{
decl_p expr_decl = find_decl(DK_IDENT, expr->str_val);
if ( expr_decl->storage_type == ST_CONST
&& type_is_integer(expr_decl->value->type))
return expr_decl->value->int_val;
printf("Error: storage type of %s = %d\n", expr->str_val, expr_decl->storage_type);
break;
}
}
printf("%s Error: expr_eval\n", expr_pos(expr));
exit(1);
return 0;
}
// Type functions
type_p expr_type_member(expr_p expr, int nr)
{
if (expr->type != NULL && nr < expr->type->nr_members)
return expr->type->members[nr];
if (expr->kind == 'i')
printf("%s: Error identifier '%s': ", expr_pos(expr), expr->str_val);
else
printf("%s: Error expression: ", expr_pos(expr));
if (expr->type == NULL)
printf("Has no type\n");
else
printf("Type has no member %d (%d)\n", nr, expr->type->nr_members);
return NULL;
}
decl_p type_decl(type_p type, const char *name)
{
for (int i = 0; i < type->nr_decls; i++)
if (type->decls[i] != NULL && strcmp(type->decls[i]->name, name) == 0)
return type->decls[i];
fprintf(stderr, "%s: Error Type %p has no field %s\n", token_it_pos(), type, name);
return NULL;
}
decl_p expr_type_decl(expr_p expr, const char *name)
{
if (expr->type != NULL)
{
decl_p decl = type_decl(expr->type, name);
if (decl != NULL)
return decl;
}
printf("%s: Error expression: ", expr_pos(expr));
if (expr->type == NULL)
printf("Has no type\n");
else
{
printf("Type %p has no field %s\n", expr->type, name);
}
return NULL;
}
// Code generation forward declarations
void gen_start_struct_or_union(void);
void gen_struct_or_union_member(decl_p decl);
void gen_variable_decl(decl_p decl);
void gen_function_start(decl_p decl);
void gen_function_end(void);
void gen_stats_open(void);
void gen_stats_close(void);
void gen_stat_expr(expr_p expr);
void gen_expr(expr_p expr, bool as_value);
void gen_indent(void);
FILE *fcode = NULL;
// Parse functions
void next_token(void)
{
store_pos_for_expr();
token_it = token_it->next(token_it, FALSE);
}
bool accept_term(int kind)
{
if (token_it->kind == kind)
{
next_token();
return TRUE;
}
return FALSE;
}
#define FAIL_FALSE { if (opt_trace_parser) fprintf(stderr, "Fail in %s at %d\n", __func__, __LINE__); return FALSE; }
#define FAIL_NULL { if (opt_trace_parser) fprintf(stderr, "Fail in %s at %d\n", __func__, __LINE__); return NULL; }
expr_p parse_expr(void);
type_p parse_type_specifier(storage_type_e *ref_storage_type);
expr_p parse_unary_expr(void);
#define MAX_CONST_STRLEN 8000
static char strbuf[MAX_CONST_STRLEN];
/*
primary_expr
: identifier
| integer
| char
| string
| '(' expr ')'
.
*/
expr_p parse_primary_expr(void)
{
if (token_it->kind == 'i')
{
decl_p decl = find_decl(DK_IDENT, token_it->token);
if (decl != NULL && decl->storage_type != ST_TYPEDEF)
{
store_pos_for_expr();
expr_p expr = new_expr('i', 0);
expr->str_val = copystr(token_it->token);
expr->type = decl->type;
if (decl->type == NULL)
printf("Identifier %s has no type\n", expr->str_val);
next_token();
return expr;
}
}
if (token_it->kind == '0')
{
store_pos_for_expr();
expr_p expr = new_expr_int_value(token_it_int_value(token_it));
int nr_L = 0;
for (char *s = token_it->token; *s != '\0'; s++)
if (*s == 'L')
nr_L++;
expr->type = nr_L > 1 ? base_type_U64 : base_type_U32;
next_token();
return expr;
}
if (token_it->kind == '\'')
{
store_pos_for_expr();
expr_p expr = new_expr_int_value(token_it->token[0]);
expr->type = base_type_S8;
next_token();
return expr;
}
if (token_it->kind == '"')
{
store_pos_for_expr();
int len = 0;
while (token_it->kind == '"')
{
if (len + token_it->length < MAX_CONST_STRLEN - 1)
memcpy(strbuf + len, token_it->token, token_it->length);
len += token_it->length;
next_token();
}
if (len >= MAX_CONST_STRLEN - 1)
{
printf("MAX_CONST_STRLEN < %d\n", len + 1);
exit(1);
}
strbuf[len] = '\0';
expr_p expr = new_expr('"', 0);
expr->str_val = (char*)malloc(len + 1);
expr->type = type_char_ptr;
memcpy(expr->str_val, strbuf, len + 1);
expr->int_val = len;
return expr;
}
if (accept_term('('))
{
type_p type = parse_type_specifier(NULL);
if (type != NULL)
{
if (opt_trace_parser)
printf("Cast expr\n");
while (accept_term('*'))
{
type_p ptr_type = new_type(TYPE_KIND_POINTER, 4, 1);
ptr_type->members[0] = type;
type = ptr_type;
}
if (!accept_term(')'))
FAIL_NULL
expr_p subj_expr = parse_unary_expr();
if (subj_expr == NULL)
FAIL_NULL;
expr_p expr = new_expr('c', 1);
expr->children[0] = subj_expr;
expr->type = type;
return expr;
}
expr_p expr = parse_expr();
if (expr == NULL)
FAIL_NULL
if (!accept_term(')'))
FAIL_NULL
return expr;
}
FAIL_NULL
}
expr_p parse_assignment_expr(void);
/*
postfix_expr
: primary_expr
| postfix_expr '[' expr ']'
| postfix_expr '(' assignment_expr LIST ')'
| postfix_expr '.' ident
| postfix_expr '->' ident
| postfix_expr '++'
| postfix_expr '--'
.
*/
expr_p parse_postfix_expr(void)
{
expr_p expr = parse_primary_expr();
if (expr == NULL)
FAIL_NULL
for (;;)
{
expr_p subj_expr = expr;
if (accept_term('['))
{
expr_p index_expr = parse_expr();
if (index_expr == NULL)
FAIL_NULL
if (!accept_term(']'))
FAIL_NULL
expr = new_expr('[', 2);
expr->children[0] = subj_expr;
expr->children[1] = index_expr;
expr->type = expr_type_member(subj_expr, 0);
}
else if (accept_term('('))
{
int nr_children = 1;
expr_p children[20];
children[0] = expr;
if (token_it->kind != ')')
{
do
{
expr_p child = parse_assignment_expr();
if (child == NULL)
FAIL_NULL
children[nr_children++] = child;
} while (accept_term(','));
}
if (!accept_term(')'))
FAIL_NULL
expr = new_expr('(', nr_children);
for (int i = 0; i < nr_children; i++)
expr->children[i] = children[i];
expr->type = expr_type_member(subj_expr, 0);
}
else if (accept_term('.'))
{
if (token_it->kind != 'i')
FAIL_NULL
expr = new_expr('.', 1);
expr->str_val = copystr(token_it->token);
expr->children[0] = subj_expr;
decl_p mem_decl = expr_type_decl(subj_expr, token_it->token);
if (mem_decl != NULL)
{
expr->type = mem_decl->type;
expr->int_val = mem_decl->su_nr;
}
next_token();
}
else if (accept_term(TK_ARROW))
{
if (token_it->kind != 'i')
FAIL_NULL
expr = new_expr(TK_ARROW, 1);
expr->str_val = copystr(token_it->token);
expr->children[0] = subj_expr;
if (subj_expr->type != NULL && subj_expr->type->kind == TYPE_KIND_POINTER)
{
decl_p mem_decl = type_decl(subj_expr->type->members[0], token_it->token);
if (mem_decl != NULL)
{
expr->type = mem_decl->type;
expr->int_val = mem_decl->su_nr;
}
}
else
printf("-> does not have pointer type\n");
next_token();
}
else if (accept_term(TK_INC))
{
expr = new_expr(OPER_POST_INC, 1);
expr->children[0] = subj_expr;
expr->type = subj_expr->type;
}
else if (accept_term(TK_DEC))
{
expr = new_expr(OPER_POST_DEC, 1);
expr->children[0] = subj_expr;
expr->type = subj_expr->type;
}
else
break;
}
if (expr->type == NULL) printf("parse_postfix_expr has no type\n");
return expr;
}
type_p parse_sizeof_type(void);
/*
unary_expr
: '++' unary_expr
| '--' unary_expr
| '&' cast_expr
| '*' cast_expr
| '+' cast_expr
| '-' cast_expr
| '~' cast_expr
| '!' cast_expr
| 'sizeof' '(' sizeof_type ')'
| 'sizeof' unary_expr
| postfix_expr
.
*/
expr_p parse_unary_expr(void)
{
if (accept_term(TK_INC))
{
expr_p expr = parse_unary_expr();
if (expr == NULL)
FAIL_NULL
expr_p pre_oper_expr = new_expr(OPER_PRE_INC, 1);
pre_oper_expr->children[0] = expr;
pre_oper_expr->type = expr->type;
return pre_oper_expr;
}
if (accept_term(TK_DEC))
{
expr_p expr = parse_unary_expr();
if (expr == NULL)
FAIL_NULL
expr_p pre_oper_expr = new_expr(OPER_PRE_DEC, 1);
pre_oper_expr->children[0] = expr;
pre_oper_expr->type = expr->type;
return pre_oper_expr;
}
if (accept_term('&'))
{
expr_p expr = parse_unary_expr();
if (expr == NULL)
FAIL_NULL
expr_p pre_oper_expr = new_expr(OPER_ADDR, 1);
pre_oper_expr->children[0] = expr;
pre_oper_expr->type = new_type(TYPE_KIND_POINTER, 4, 1);
pre_oper_expr->type->members[0] = expr->type;
return pre_oper_expr;
}
if (accept_term('*'))
{
expr_p expr = parse_unary_expr();
if (expr == NULL)
FAIL_NULL
expr_p pre_oper_expr = new_expr(OPER_STAR, 1);
pre_oper_expr->children[0] = expr;
pre_oper_expr->type = expr_type_member(expr, 0);
return pre_oper_expr;
}
if (accept_term('+'))
{
expr_p expr = parse_unary_expr();
if (expr == NULL)
FAIL_NULL
expr_p pre_oper_expr = new_expr(OPER_PLUS, 1);
pre_oper_expr->children[0] = expr;
pre_oper_expr->type = expr->type;
return pre_oper_expr;
}
if (accept_term('-'))
{
expr_p expr = parse_unary_expr();
if (expr == NULL)
FAIL_NULL
if (expr->kind == '0')
{
expr_p neg_num = new_expr_int_value(-expr->int_val);
neg_num->type = base_signed_type(expr->type);
return neg_num;
}
expr_p pre_oper_expr = new_expr(OPER_MIN, 1);
pre_oper_expr->children[0] = expr;
pre_oper_expr->type = expr->type;
return pre_oper_expr;
}
if (accept_term('~'))
{
expr_p expr = parse_unary_expr();
if (expr == NULL)
FAIL_NULL
expr_p pre_oper_expr = new_expr('~', 1);
pre_oper_expr->children[0] = expr;
pre_oper_expr->type = expr->type;
return pre_oper_expr;
}
if (accept_term('!'))
{
expr_p expr = parse_unary_expr();
if (expr == NULL)
FAIL_NULL
expr_p pre_oper_expr = new_expr('!', 1);
pre_oper_expr->children[0] = expr;
pre_oper_expr->type = base_type_bool;
return pre_oper_expr;
}
if (accept_term(TK_SIZEOF))
{
type_p type = NULL;
if (accept_term('('))
{
type = parse_sizeof_type();
if (type == NULL)
{
expr_p sizeof_expr = parse_expr();
if (sizeof_expr == NULL)
FAIL_NULL
type = sizeof_expr->type;
}
if (!accept_term(')'))
FAIL_NULL
}
else
{
expr_p sizeof_expr = parse_unary_expr();
if (sizeof_expr == NULL)
FAIL_NULL
type = sizeof_expr->type;
}
int size = 0;
if (type == NULL)
printf("%s Error: sizeof expression has not size\n", token_it_pos());
else
size = type->size;
return new_expr_int_value(size);
}
return parse_postfix_expr();
}
/*
sizeof_type
: 'char'
| 'int'
| 'unsigned' ('int') OPT
| 'double'
| 'void' ('*') OPT
| 'struct' ident
| ident
| sizeof_type '*'
.
*/
type_p parse_sizeof_type(void)
{
type_p type = NULL;
if (accept_term(TK_CHAR))
type = base_type_S8;
else if (accept_term(TK_INT))
type = base_type_S32;
else if (accept_term(TK_UNSIGNED))
{
if (accept_term(TK_INT))
type = base_type_U32;
type = base_type_U32;
}
else if (accept_term(TK_DOUBLE))
type = base_type_double;
else if (accept_term(TK_VOID))
{
if (accept_term('*'))
type = type_char_ptr; // Missuse char pointer here
}
else if (accept_term(TK_STRUCT))
{
if (token_it->kind == 'i')
{
decl_p decl = find_decl(DK_STRUCT, token_it->token);
if (decl != NULL && decl->type != NULL)
{
type = decl->type;
next_token();
}
}
}
else if (token_it->kind == 'i')
{
decl_p decl = find_decl(DK_IDENT, token_it->token);
if (decl != NULL && decl->type != NULL && decl->storage_type == ST_TYPEDEF)
{
type = decl->type;
next_token();
}
}
if (type == NULL)
return NULL;
while (accept_term('*'))
type = type_char_ptr; // Missuse char pointer here
return type;
}
/*
cast_expr
: '(' abstract_declaration ')' cast_expr
| unary_expr
.
*/
void expr_dioper_set_type(expr_p expr)
{
type_p type_lhs = expr->children[0]->type;
type_p type_rhs = expr->children[1]->type;
if (type_is_integer(type_lhs) && type_is_integer(type_rhs))
{
int size = type_lhs->size > type_rhs->size ? type_lhs->size : type_rhs->size;
bool signed_int = (((int)type_lhs->base_type | (int)type_lhs->base_type) & 2) == 2;
if (size == 8)
expr->type = signed_int ? base_type_S64 : base_type_U64;
else if (size == 4)
expr->type = signed_int ? base_type_S32 : base_type_U32;
else if (size == 2)
expr->type = signed_int ? base_type_S16 : base_type_U16;
else
expr->type = signed_int ? base_type_S8 : base_type_U8;
}
else if (type_is_pointer(type_lhs) && type_is_integer(type_rhs))
expr->type = type_lhs;
else if (type_is_integer(type_lhs) && type_is_pointer(type_rhs))
expr->type = type_rhs;
else if (expr->kind == '-' && type_is_pointer(type_lhs) && type_is_pointer(type_rhs))
expr->type = base_type_S32;
if (expr->type == NULL)
{
printf("%s: Error dioper expression: Has no type.", expr_pos(expr));
if (!type_is_integer(type_lhs)) printf(" LHS not an integer %d", type_lhs == NULL ? -1 : type_lhs->kind);
if (!type_is_integer(type_rhs)) printf(" RHS not an integer %d", type_rhs == NULL ? -1 : type_rhs->kind);
printf("\n");
}
}
/*
l_expr1 : cast_expr (('*' | '/' | '%') cast_expr) SEQ OPT .
*/
expr_p parse_expr1(void)
{
expr_p expr = parse_unary_expr();
for (;;)
{
int kind = token_it->kind;
if (accept_term('*') || accept_term('/') || accept_term('%'))
{
expr_p lhs = expr;
expr_p rhs = parse_unary_expr();
if (rhs == NULL)
FAIL_NULL
expr = new_expr(kind, 2);
expr->children[0] = lhs;
expr->children[1] = rhs;
expr_dioper_set_type(expr);
}
else
break;
}
if (expr != NULL && expr->type == NULL) printf("parse_expr1 has no type\n");
return expr;
}
/*
l_expr2 : l_expr1 (('+' | '-') l_expr1) SEQ OPT .
*/
expr_p parse_expr2(void)
{
expr_p expr = parse_expr1();
for (;;)
{
int kind = token_it->kind;
if (accept_term('+') || accept_term('-'))
{
expr_p lhs = expr;
expr_p rhs = parse_expr1();
if (rhs == NULL)
FAIL_NULL
expr = new_expr(kind, 2);
expr->children[0] = lhs;
expr->children[1] = rhs;
expr_dioper_set_type(expr);
}
else
break;
}
return expr;
}
/*
l_expr3 : l_expr2 (('<<' | '>>') l_expr2) SEQ OPT .
*/
expr_p parse_expr3(void)
{
expr_p expr = parse_expr2();
for (;;)
{
int kind = token_it->kind;
if (accept_term(TK_SHL) || accept_term(TK_SHR))
{
expr_p lhs = expr;
expr_p rhs = parse_expr2();
if (rhs == NULL)
FAIL_NULL
expr = new_expr(kind, 2);
expr->children[0] = lhs;
expr->children[1] = rhs;
expr->type = expr->children[0]->type;
}
else
break;
}
return expr;
}
/*
l_expr4 : l_expr3 (('<=' | '>=' | '<' | '>' | '==' | '!=') l_expr3) SEQ OPT .
*/
expr_p parse_expr4(void)
{
expr_p expr = parse_expr3();
for (;;)
{
int kind = token_it->kind;
if ( accept_term(TK_EQ) || accept_term(TK_NE)
|| accept_term(TK_LE) || accept_term(TK_GE)
|| accept_term('<') || accept_term('>'))
{
expr_p lhs = expr;
expr_p rhs = parse_expr3();
if (rhs == NULL)
FAIL_NULL
expr = new_expr(kind, 2);
expr->children[0] = lhs;
expr->children[1] = rhs;
expr->type = base_type_bool;
}
else
break;
}
return expr;
}
/*
l_expr5 : l_expr4 ('^' l_expr4) SEQ OPT .
*/
expr_p parse_expr5(void)
{
expr_p expr = parse_expr4();
while (accept_term('^'))
{
expr_p lhs = expr;
expr_p rhs = parse_expr4();
if (rhs == NULL)
FAIL_NULL
expr = new_expr('^', 2);
expr->children[0] = lhs;
expr->children[1] = rhs;
expr_dioper_set_type(expr);
}
return expr;
}
/*
l_expr6 : l_expr5 ('&' l_expr5) SEQ OPT .
*/
expr_p parse_expr6(void)
{
expr_p expr = parse_expr5();
while (accept_term('&'))
{
expr_p lhs = expr;
expr_p rhs = parse_expr5();
if (rhs == NULL)
FAIL_NULL
expr = new_expr('&', 2);
expr->children[0] = lhs;
expr->children[1] = rhs;
expr_dioper_set_type(expr);
}
return expr;
}
/*
l_expr7 : l_expr6 ('|' l_expr6) SEQ OPT .
*/
expr_p parse_expr7(void)
{
expr_p expr = parse_expr6();
while (accept_term('|'))
{
expr_p lhs = expr;
expr_p rhs = parse_expr6();
if (rhs == NULL)
FAIL_NULL
expr = new_expr('|', 2);
expr->children[0] = lhs;
expr->children[1] = rhs;
expr_dioper_set_type(expr);
}
return expr;
}
/*
l_expr8 : l_expr7 ('&&' l_expr7) SEQ OPT .
*/
expr_p parse_expr8(void)
{
expr_p expr = parse_expr7();
while (accept_term(TK_AND))
{
expr_p lhs = expr;
expr_p rhs = parse_expr7();
if (rhs == NULL)
FAIL_NULL
expr = new_expr(TK_AND, 2);
expr->children[0] = lhs;
expr->children[1] = rhs;
expr->type = base_type_bool;
}
return expr;
}
/*
l_expr9 : l_expr8 ('||' l_expr8) SEQ OPT .
*/
expr_p parse_expr9(void)
{
expr_p expr = parse_expr8();
while (accept_term(TK_OR))
{
expr_p lhs = expr;
expr_p rhs = parse_expr8();
if (rhs == NULL)
FAIL_NULL
expr = new_expr(TK_OR, 2);
expr->children[0] = lhs;
expr->children[1] = rhs;
expr->type = base_type_bool;
}
return expr;
}
/*
conditional_expr
: l_expr9 '?' l_expr9 ':' conditional_expr
| l_expr9
.
*/
expr_p parse_conditional_expr(void)
{
expr_p expr = parse_expr9();
if (accept_term('?'))
{
expr_p cond_expr = expr;
expr_p then_expr = parse_expr9();
if (then_expr == NULL)
FAIL_NULL
if (!accept_term(':'))
FAIL_NULL
expr_p else_expr = parse_conditional_expr();
if (else_expr == NULL)
FAIL_NULL
expr = new_expr('?', 3);
expr->children[0] = cond_expr;
expr->children[1] = then_expr;
expr->children[2] = else_expr;
expr->type = then_expr->type;
}
return expr;
}
/*
assignment_expr
: conditional_expr
(( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '|=' | '^=')
assignment_expr
) SEQ
.
*/
expr_p parse_assignment_expr(void)
{
expr_p expr = parse_conditional_expr();
if (expr == NULL)
FAIL_NULL
for (;;)
{
if (token_it->kind == '=' || (token_it->kind >= TK_ASS && token_it->kind < TK_ASS + 127))
{
int kind = token_it->kind;
next_token();
expr_p lhs = expr;
expr_p rhs = parse_assignment_expr();
if (rhs == NULL)
FAIL_NULL
expr = new_expr(kind, 2);
expr->children[0] = lhs;
expr->children[1] = rhs;
expr->type = lhs->type;
//fprintf(fcode, "# %s %d: type of = is %d\n", token_it->filename, token_it->line, expr->type->base_type);
}
else
break;
}
return expr;
}
/*
expr : assignment_expr LIST
*/
expr_p parse_expr(void)
{
expr_p expr = parse_assignment_expr();
if (expr == NULL)
FAIL_NULL
if (accept_term(','))
{
int nr_children = 1;
expr_p children[20];
children[0] = expr;
do
{
expr_p child = parse_assignment_expr();
if (child == NULL)
FAIL_NULL
children[nr_children++] = child;
} while (accept_term(','));
expr = new_expr(',', nr_children);
for (int i = 0; i < nr_children; i++)
expr->children[i] = children[i];
expr->type = expr->children[nr_children-1]->type;
}
return expr;
}
bool parse_statements(expr_p continue_expr);
expr_p parse_initializer(void);
typedef struct struct_or_union_constructor_s struct_or_union_constructor_t;
struct struct_or_union_constructor_s
{
bool is_struct;
int pos;
int size;
};
struct_or_union_constructor_t *cur_struct_or_union = NULL;
int save_decl_depth = 0;
bool inside_function = FALSE;
bool inside_argument_list = FALSE;
int round_up_word(int size) { return (size + 3) & ~3; }
int array_element_size(type_p type)
{
return type->size == 1 && (type->base_type == BT_S8 || type->base_type == BT_U8)
? 1
: round_up_word(type->size);
}
/*
array_indexes : expr ']' ('[' array_indexes) OPT .
*/
bool parse_array_indexes(type_p type, type_p *arr_type)
{
expr_p expr = parse_expr();
if (expr == NULL)
return FALSE;
int nr_elems = expr_eval(expr);
if (!accept_term(']'))
FAIL_FALSE
if (accept_term('['))
{
type_p result_type = NULL;
if (!parse_array_indexes(type, &result_type))
FAIL_FALSE
type = result_type;
}
(*arr_type) = new_type(TYPE_KIND_ARRAY, nr_elems * type->size, 1);
(*arr_type)->members[0] = type;
(*arr_type)->nr_elems = nr_elems;
(*arr_type)->size = nr_elems * array_element_size(type);
return TRUE;
}
/*
declaration
: ('typedef' | 'extern' | 'inline' | 'static' ) SEQ OPT
type_specifier
( ';'
| func_declarator '(' declaration LIST (',' '...') OPT ')'
( ';'
| '{' statements '}'
)
| ( declarator ( '=' initializer ) OPT ) LIST ";"
)
.
func_declarator
: '*' OPT SEQ ( ident | '(' '*' ident ')')
.
declarator
: '*' OPT SEQ
( ident | '(' '*' ident ')')
( ('[' ']') OPT '[' array_indexes ) OPT
.
*/
bool parse_declaration(bool is_param)
{
storage_type_e storage_type = ST_NONE;
for (;;)
{
if (accept_term(TK_TYPEDEF))
{
storage_type = ST_TYPEDEF;
if (inside_function)
fprintf(stderr, "%s: typedef inside function\n", token_it_pos());
}
else if (accept_term(TK_EXTERN))
{
}
else if (accept_term(TK_INLINE))
{
}
else if (accept_term(TK_STATIC))
{
if (inside_function)
storage_type = ST_STATIC;
}
else
break;
}
type_p type_specifier = parse_type_specifier(&storage_type);
if (type_specifier == NULL)
FAIL_FALSE
if (accept_term(';'))
{
if ( cur_struct_or_union != NULL
&& (type_specifier->kind == TYPE_KIND_STRUCT || type_specifier->kind == TYPE_KIND_UNION))
{
for (int i = 0; i < type_specifier->nr_decls; i++)
{
decl_p decl = type_specifier->decls[i];
decl_p decl_clone = add_decl(decl->kind, decl->name, decl->type);
decl_clone->storage_type = decl->storage_type;
decl_clone->pos = cur_struct_or_union->pos + decl->pos;
}
if (cur_struct_or_union->is_struct)
{
cur_struct_or_union->pos += round_up_word(type_specifier->size);
cur_struct_or_union->size = cur_struct_or_union->pos;
}
else
{
int size = round_up_word(type_specifier->size);
if (size > cur_struct_or_union->size)
cur_struct_or_union->size = size;
}
}
return TRUE;
}
do
{
type_p type = type_specifier;
while (accept_term('*'))
{
type_p pointer_type = new_type(TYPE_KIND_POINTER, 4, 1);
pointer_type->members[0] = type;
type = pointer_type;
}
decl_p prev_decl = NULL;
decl_p decl = NULL;
bool as_pointer = FALSE;
if (token_it->kind == 'i')
{
if (!inside_function && !inside_argument_list && cur_struct_or_union == NULL)
prev_decl = find_decl(DK_IDENT, token_it->token);
decl = add_decl(DK_IDENT, token_it->token, NULL);
next_token();
}
else if (accept_term('('))
{
if (accept_term('*'))
{
if (token_it->kind == 'i')
{
as_pointer = TRUE;
if (!inside_function && !inside_argument_list && cur_struct_or_union == NULL)
prev_decl = find_decl(DK_IDENT, token_it->token);
decl = add_decl(DK_IDENT, token_it->token, NULL);
next_token();
}
}
if (!accept_term(')'))
FAIL_FALSE
}
if (decl != NULL)
{
for (;;)
{
type_p subj_type = type;
if (accept_term('('))
{
inside_argument_list = TRUE;
cur_labels = NULL;
decl_p save_ident_decls = cur_ident_decls;
bool var_params = FALSE;
do
{
if (accept_term(TK_DASHES))
{
var_params = TRUE;
break;
}
if (!parse_declaration(TRUE))
FAIL_FALSE;
} while (accept_term(','));
if (!accept_term(')'))
FAIL_FALSE;
inside_argument_list = FALSE;
type = new_type(TYPE_KIND_FUNCTION, 4, 1);
type->members[0] = subj_type;
int nr_parameters = 0;
for (decl_p decl1 = cur_ident_decls; decl1 != save_ident_decls; decl1 = decl1->prev)
nr_parameters++;
decl_p parameters[20];
int i = nr_parameters;
if (var_params)
{
nr_parameters++;
parameters[i] = NULL;
}
for (decl_p decl1 = cur_ident_decls; decl1 != save_ident_decls; decl1 = decl1->prev)
parameters[--i] = decl1;
type_set_decls(type, nr_parameters, parameters);
decl->type = type;
if (accept_term('{'))
{
inside_function = TRUE;
gen_function_start(decl);
if (!parse_statements(NULL))
FAIL_FALSE
if (!accept_term('}'))
FAIL_FALSE
cur_ident_decls = save_ident_decls;
gen_function_end();
inside_function = FALSE;
return TRUE;
}
if (!inside_function && cur_struct_or_union == NULL)
fprintf(fcode, "void %s ;\n", decl->name);
cur_ident_decls = save_ident_decls;
break;
}
else if (accept_term('['))
{
if (accept_term(']'))
{
type_p ptr_type = new_type(TYPE_KIND_POINTER, 4, 1);
if (accept_term('['))
{
type_p result_type = NULL;
if (!parse_array_indexes(type, &result_type))
FAIL_FALSE
type = result_type;
}
ptr_type->members[0] = type;
type = ptr_type;
}
else
{
type_p result_type = NULL;
if (!parse_array_indexes(type, &result_type))
FAIL_FALSE
type = result_type;
}
}
else
break;
}
if (as_pointer)
{
type_p ptr_type = new_type(TYPE_KIND_POINTER, 4, 1);
ptr_type->members[0] = type;
type = ptr_type;
}
if (prev_decl != NULL && type->kind != TYPE_KIND_FUNCTION)
{
fprintf(stderr, "%s: Warning: declaration of %s repeated\n", token_it_pos(), decl->name);
remove_decl(decl);
}
decl->type = type;
decl->storage_type = storage_type;
if (cur_struct_or_union != NULL)
{
decl->pos = cur_struct_or_union->pos;
if (cur_struct_or_union->is_struct)
{
cur_struct_or_union->pos += round_up_word(type->size);
cur_struct_or_union->size = cur_struct_or_union->pos;
}
else
{
int size = round_up_word(type->size);
if (size > cur_struct_or_union->size)
cur_struct_or_union->size = size;
}
}
if (storage_type == ST_TYPEDEF && type->typedef_decl == NULL)
{
type->typedef_decl = decl;
if ( type->kind == TYPE_KIND_STRUCT
&& ( strcmp(decl->name, "Stab_Sym") == 0
|| strncmp(decl->name, "Elf32_", 6) == 0
|| strcmp(decl->name, "ArchiveHeader") == 0
|| strcmp(decl->name, "ArHdr") == 0))
{
int pos = 0;
for (int i = 0; i < type->nr_decls; i++)
{
type->decls[i]->pos = pos;
pos += type->decls[i]->type->size;
}
if (pos < type->size)
{
printf("%s Info: %s is 'packed' with size reduced from %d to %d\n", token_it_pos(), decl->name, type->size, pos);
type->size = pos;
gen_start_struct_or_union();
for (int i = 0; i < type->nr_decls; i++)
gen_struct_or_union_member(type->decls[i]);
}
}
}
if (accept_term('='))
{
decl->value = parse_initializer();
if (!as_pointer && decl->type->kind == TYPE_KIND_POINTER && decl->value != NULL && decl->value->kind == 'l')
{
// Fix type:
int nr_elems = decl->value->nr_children;
decl->type->kind = TYPE_KIND_ARRAY;
decl->type->size = nr_elems * array_element_size(decl->type->members[0]);
decl->type->nr_elems = nr_elems;
}
}
if (!is_param && cur_struct_or_union == NULL && decl->storage_type != ST_TYPEDEF && type->kind != TYPE_KIND_FUNCTION)
gen_variable_decl(decl);
}
} while (!is_param && accept_term(','));
return is_param || accept_term(';');
}
/*
type_specifier
: 'const' OPT
( 'char' 'const' OPT
| 'unsigned' ('char' | 'short' | 'long' 'long' OPT | 'int') OPT
| 'short'
| 'int'
| 'long' ('double' | 'long') OPT
| 'float'
| 'double'
| 'void'
| 'struct' struct_or_union_specifier
| 'union' struct_or_union_specifier
| 'enum' enum_specifier
| ident
)
.
*/
type_p parse_struct_or_union_specifier(decl_kind_e decl_kind);
type_p parse_enum_specifier(void);
type_p parse_type_specifier(storage_type_e *ref_storage_type)
{
if (accept_term(TK_CONST))
{
if (ref_storage_type != NULL) *ref_storage_type = ST_CONST;
}
if (accept_term(TK_CHAR))
{
if (accept_term(TK_CONST))
{
if (ref_storage_type != NULL) *ref_storage_type = ST_CONST;
}
return base_type_S8;
}
if (accept_term(TK_UNSIGNED))
{
if (accept_term(TK_CHAR))
{
return base_type_U8;
}
if (accept_term(TK_SHORT))
{
return base_type_U16;
}
if (accept_term(TK_LONG))
{
if (accept_term(TK_LONG))
{
return base_type_U64;
}
return base_type_U32;
}
if (accept_term(TK_INT))
{
return base_type_U32;
}
return base_type_U32;
}
if (accept_term(TK_SHORT))
{
return base_type_U16;
}
if (accept_term(TK_INT))
{
return base_type_S32;
}
if (accept_term(TK_LONG))
{
if (accept_term(TK_DOUBLE))
{
return base_type_double;
}
if (accept_term(TK_LONG))
{
return base_type_S64;
}
return base_type_S32;
}
if (accept_term(TK_FLOAT))
{
return base_type_float;
}
if (accept_term(TK_DOUBLE))
{
return base_type_double;
}
if (accept_term(TK_VOID))
{
return base_type_void;
}
if (accept_term(TK_STRUCT))
{
return parse_struct_or_union_specifier(DK_STRUCT);
}
if (accept_term(TK_UNION))
{
return parse_struct_or_union_specifier(DK_UNION);
}
if (accept_term(TK_ENUM))
{
return parse_enum_specifier();
}
if (token_it->kind == 'i')
{
decl_p decl = find_decl(DK_IDENT, token_it->token);
if (decl == NULL)
{
if (opt_trace_parser)
printf("Ident %s has no declaration\n", token_it->token);
FAIL_NULL
}
if (decl->type == NULL)
FAIL_NULL
if (decl->storage_type == ST_TYPEDEF)
{
if (opt_trace_parser)
printf("Ident %s is typedef\n", decl->name);
next_token();
return decl->type;
}
else
{
if (opt_trace_parser)
printf("Ident %s is not a typedef\n", token_it->token);
FAIL_NULL
}
}
FAIL_NULL
}
/*
struct_or_union_specifier : ident OPT ('{' declaration SEQ OPT "}") OPT .
*/
type_p parse_struct_or_union_specifier(decl_kind_e decl_kind)
{
type_kind_e type_kind = decl_kind == DK_STRUCT ? TYPE_KIND_STRUCT : TYPE_KIND_UNION;
type_p type = NULL;
if (token_it->kind == 'i')
{
decl_p decl = find_or_add_decl(decl_kind, token_it->token);
if (decl->type == NULL)
{
decl->type = new_type(type_kind, 0, 0);
}
type = decl->type;
next_token();
}
if (accept_term('{'))
{
struct_or_union_constructor_t *parent = cur_struct_or_union;
struct_or_union_constructor_t this_struct_or_union;
this_struct_or_union.is_struct = decl_kind == DK_STRUCT;
this_struct_or_union.pos = 0;
this_struct_or_union.size = 0;
cur_struct_or_union = &this_struct_or_union;
decl_p save_ident_decls = cur_ident_decls;
do
{
if (!parse_declaration(FALSE))
FAIL_NULL
} while (!accept_term('}'));
int nr_decls = 0;
for (decl_p decl1 = cur_ident_decls; decl1 != save_ident_decls; decl1 = decl1->prev)
nr_decls++;
if (type == NULL)
{
type = new_type(type_kind, this_struct_or_union.size, 0);
}
else
type->size = this_struct_or_union.size;
decl_p decls[200];
int i = nr_decls;
for (decl_p decl1 = cur_ident_decls; decl1 != save_ident_decls; decl1 = decl1->prev)
decls[--i] = decl1;
{
gen_start_struct_or_union();
for (int i = 0; i < nr_decls; i++)
gen_struct_or_union_member(decls[i]);
}
type_set_decls(type, nr_decls, decls);
cur_ident_decls = save_ident_decls;
cur_struct_or_union = parent;
}
return type;
}
/*
enum_specifier : ident OPT ('{' ident ('=' constant_expr) OPT ) LIST '}') OPT .
*/
void gen_enum_decl(decl_p decl);
type_p parse_enum_specifier(void)
{
type_p type = NULL;
if (token_it->kind == 'i')
{
decl_p decl = find_or_add_decl(DK_ENUM, token_it->token);
if (decl->type == NULL)
{
decl->type = new_type(DK_ENUM, 4, 0);
}
type = decl->type;
next_token();
}
int next_enum_val = 0;
if (accept_term('{'))
{
for (;;)
{
if (token_it->kind != 'i')
FAIL_NULL
decl_p const_decl = add_decl(DK_IDENT, token_it->token, base_type_S32);
next_token();
if (accept_term('='))
{
expr_p expr = parse_conditional_expr();
if (expr == NULL)
FAIL_NULL
next_enum_val = expr_eval(expr);
}
const_decl->value = new_expr_int_value(next_enum_val);
const_decl->storage_type = ST_CONST;
gen_enum_decl(const_decl);
next_enum_val++;
if (!accept_term(','))
break;
if (token_it->kind == '}')
break;
}
if (!accept_term('}'))
FAIL_NULL
}
if (type == NULL)
type = new_type(DK_ENUM, 4, 0);
return type;
}
/*
initializer
: '{' initializer LIST OPT ',' OPT '}'
| assignment_expr
.
*/
expr_p parse_initializer(void)
{
if (accept_term('{'))
{
expr_p exprs[2000];
int nr_exprs = 0;
for (;;)
{
exprs[nr_exprs++] = parse_initializer();
if (!accept_term(','))
break;
if (token_it->kind == '}')
break;
}
if (!accept_term('}'))
FAIL_NULL
expr_p expr_list = new_expr('l', nr_exprs);
for (int i = 0; i < nr_exprs; i++)
expr_list->children[i] = exprs[i];
return expr_list;
}
return parse_assignment_expr();
}
bool add_tracing = FALSE;
/*
statement
: (ident ':') SEQ OPT
( 'if' '(' expr ')' statement ('else' statement) OPT
| 'while' '(' expr ')' statement
| 'do' statement 'while' '(' expr ')' ';'
| 'for' '(' (declaration | expr ';') expr ';' expr ')' statement
| 'break' ';'
| 'continue' ';'
| 'switch' '(' expr ')' '{'
( ( 'case' expr ':' | 'default' ':') SEQ statement SEQ ) SEQ '}'
| 'return' expr OPT ';'
| 'goto' ident ';'
| '{' statements '}'
| expr ';'
)
.
*/
int default_case_nr = 0;
int fall_through_case_nr = 0;
bool label_statement = FALSE;
bool parse_statement(bool in_block, expr_p continue_expr)
{
for (;;)
{
if (token_it->kind == 'i')
{
label_p label = find_label(token_it->token);
if (label == NULL && find_decl(DK_IDENT, token_it->token) == NULL)
label = find_or_add_label(token_it->token);
if (label != NULL)
{
label_statement = TRUE;
gen_indent();
fprintf(fcode, ":%s\n", label->name);
next_token();
if (!accept_term(':'))
FAIL_FALSE
continue;
}
}
break;
}
fprintf(fcode, "# %s %d\n", token_it->filename, token_it->line);
if (accept_term(TK_IF))
{
if (!accept_term('('))
FAIL_FALSE
expr_p cond = parse_expr();
if (cond == NULL)
FAIL_FALSE
if (!accept_term(')'))
FAIL_FALSE
gen_indent();
gen_expr(cond, TRUE);
fprintf(fcode, "if\n");
gen_stats_open();
if (!parse_statement(TRUE, continue_expr))
FAIL_FALSE
gen_stats_close();
if (accept_term(TK_ELSE))
{
gen_indent();
fprintf(fcode, "else\n");
gen_stats_open();
if (!parse_statement(TRUE, continue_expr))
FAIL_FALSE
gen_stats_close();
}
return TRUE;
}
if (accept_term(TK_WHILE))
{
gen_indent();
fprintf(fcode, "do\n");
gen_stats_open();
if (!accept_term('('))
FAIL_FALSE
expr_p cond = parse_expr();
if (cond == NULL)
FAIL_FALSE
if (!accept_term(')'))
FAIL_FALSE
gen_indent();
gen_expr(cond, TRUE);
fprintf(fcode, "! if { break }\n");
if (!parse_statement(TRUE, NULL))
FAIL_FALSE
gen_stats_close();
return TRUE;
}
if (accept_term(TK_DO))
{
gen_indent();
fprintf(fcode, "do\n");
gen_stats_open();
if (!parse_statement(TRUE, NULL))
FAIL_FALSE
if (!accept_term(TK_WHILE))
FAIL_FALSE
if (!accept_term('('))
FAIL_FALSE
expr_p cond = parse_expr();
if (cond == NULL)
FAIL_FALSE
if (!accept_term(')'))
FAIL_FALSE
if (!accept_term(';'))
FAIL_FALSE
gen_indent();
gen_expr(cond, TRUE);
fprintf(fcode, "! if { break }\n");
gen_stats_close();
return TRUE;
}
if (accept_term(TK_FOR))
{
gen_stats_open();
decl_p save_ident_decls = cur_ident_decls;
if (!accept_term('('))
FAIL_FALSE
if (!parse_declaration(FALSE))
{
expr_p init_expr = parse_expr();
gen_stat_expr(init_expr);
if (!accept_term(';'))
FAIL_FALSE
}
gen_indent();
fprintf(fcode, "do\n");
gen_stats_open();
expr_p cond = parse_expr();
if (cond != 0)
{
gen_indent();
gen_expr(cond, TRUE);
fprintf(fcode, "! if { break }\n");
}
if (!accept_term(';'))
FAIL_FALSE
expr_p next_expr = parse_expr();
if (!accept_term(')'))
FAIL_FALSE
if (!parse_statement(TRUE, next_expr))
FAIL_FALSE
gen_stat_expr(next_expr);
cur_ident_decls = save_ident_decls;
gen_stats_close();
gen_stats_close();
return TRUE;
}
if (accept_term(TK_BREAK))
{
if (!accept_term(';'))
FAIL_FALSE
gen_indent();
fprintf(fcode, "break\n");
return TRUE;
}
if (accept_term(TK_CONTINUE))
{
if (!accept_term(';'))
FAIL_FALSE
gen_stat_expr(continue_expr);
gen_indent();
fprintf(fcode, "continue\n");
return TRUE;
}
if (accept_term(TK_SWITCH))
{
if (!accept_term('('))
FAIL_FALSE
expr_p switch_expr = parse_expr();
if (switch_expr == NULL)
FAIL_FALSE
if (!accept_term(')'))
FAIL_FALSE
if (!accept_term('{'))
FAIL_FALSE
gen_indent();
gen_expr(switch_expr, TRUE);
fprintf(fcode, "do\n");
gen_stats_open();
bool fall_through = FALSE;
bool has_default = FALSE;
while (token_it->kind == TK_CASE || token_it->kind == TK_DEFAULT)
{
int case_labels[100];
int nr_case_labels = 0;
bool default_case = FALSE;
for (;;)
{
if (accept_term(TK_CASE))
{
expr_p expr = parse_expr();
if (expr == NULL)
FAIL_FALSE
if (!accept_term(':'))
FAIL_FALSE
if (nr_case_labels < 100)
case_labels[nr_case_labels++] = expr_eval(expr);
else
printf("Error: more than 50 case label\n");
}
else if (accept_term(TK_DEFAULT))
{
if (!accept_term(':'))
FAIL_FALSE
default_case = TRUE;
has_default = TRUE;
}
else
break;
}
if (nr_case_labels == 0)
{
gen_indent();
fprintf(fcode, "0 ");
}
else
{
for (int i = 0; i < nr_case_labels; i++)
{
gen_indent();
if (i > 0)
{
fprintf(fcode, "|| { ");
}
//gen_expr(switch_expr, TRUE);
fprintf(fcode, "$ %u == ", case_labels[i]);
if (i + 1 < nr_case_labels)
fprintf(fcode, "\n");
}
for (int i = 1; i < nr_case_labels; i++)
fprintf(fcode, "} ");
if (nr_case_labels > 1)
fprintf(fcode, " ");
}
fprintf(fcode, "if\n");
gen_stats_open();
if (nr_case_labels > 0)
{
gen_indent();
fprintf(fcode, ";\n");
}
if (fall_through)
{
gen_indent();
fprintf(fcode, ":_fall_through_case_%d\n", fall_through_case_nr);
}
if (default_case)
{
gen_indent();
fprintf(fcode, ":_default_case_%d\n", default_case_nr);
}
bool has_break = FALSE;
for (bool go = TRUE; go;)
{
if (token_it->kind == TK_BREAK || token_it->kind == TK_RETURN || token_it->kind == TK_GOTO)
has_break = TRUE;
label_statement = FALSE;
go = parse_statement(FALSE, continue_expr);
if (label_statement)
has_break = FALSE;
}
if (token_it->kind == '}' && !has_break)
{
gen_indent();
fprintf(fcode, "break\n");
has_break = TRUE;
}
fall_through = !has_break;
if (fall_through)
{
fall_through_case_nr++;
gen_indent();
fprintf(fcode, "goto _fall_through_case_%d\n", fall_through_case_nr);
}
gen_stats_close();
}
if (!accept_term('}'))
FAIL_FALSE
gen_indent();
if (has_default)
{
fprintf(fcode, "; goto _default_case_%d\n", default_case_nr);
default_case_nr++;
}
else
fprintf(fcode, "; break\n");
gen_stats_close();
return TRUE;
}
if (accept_term(TK_RETURN))
{
gen_indent();
expr_p ret_value = parse_expr();
if (ret_value != NULL)
gen_expr(ret_value, TRUE);
else
fprintf(fcode, "0 ");
if (add_tracing)
fprintf(fcode, "\"Exit\\n\" stdout ? fputs () ; \n");
fprintf(fcode, "return\n");
if (!accept_term(';'))
FAIL_FALSE
return TRUE;
}
if (accept_term(TK_GOTO))
{
find_or_add_label(token_it->token);
gen_indent();
fprintf(fcode, "goto %s\n", token_it->token);
next_token();
if (!accept_term(';'))
FAIL_FALSE
return TRUE;
}
if (accept_term('{'))
{
if (!in_block)
gen_stats_open();
if (!parse_statements(continue_expr))
FAIL_FALSE;
if (!accept_term('}'))
FAIL_FALSE
if (!in_block)
gen_stats_close();
return TRUE;
}
expr_p expr = parse_expr();
gen_stat_expr(expr);
if (!accept_term(';'))
FAIL_FALSE
return TRUE;
}
/*
statements : (declaration | statement) SEQ OPT .
*/
bool parse_statements(expr_p continue_expr)
{
decl_p save_ident_decls = cur_ident_decls;
do
{
} while (token_it->kind != '}' && (parse_declaration(FALSE) || parse_statement(FALSE, continue_expr)));
cur_ident_decls = save_ident_decls;
return TRUE;
}
void add_base_type(const char *name, type_p base_type)
{
add_decl(DK_IDENT, name, base_type);
cur_ident_decls->storage_type = ST_TYPEDEF;
}
void add_function(const char *name, type_p result_type)
{
type_p type = new_type(TYPE_KIND_FUNCTION, 4, 1);
type->members[0] = result_type;
add_decl(DK_IDENT, name, type);
}
void add_predefined_types(void)
{
add_base_type("uint32_t", base_type_U32);
add_base_type("int32_t", base_type_S32);
add_base_type("uint16_t", base_type_U16);
add_base_type("uint8_t", base_type_U8);
add_base_type("int8_t", base_type_S8);
add_base_type("size_t", base_type_U32);
// Need to verify the following:
add_base_type("ssize_t", base_type_U32);
add_base_type("jmp_buf", base_type_jmp_buf);
}
bool parse_file(const char *input_filename, bool only_preprocess)
{
strcpy(include_path, input_filename);
end_include_prefix = include_path;
for (char *s = include_path; *s != '\0'; s++)
if (*s == '/')
end_include_prefix = s + 1;
file_iterator_p input_it = new_file_iterator(input_filename);
if (input_it->base.ch == '\0')
{
printf("ERROR: Could not open file %s or it was empty\n", input_filename);
return FALSE;
}
line_splice_iterator_p splice_it = new_line_splice_iterator(&input_it->base);
comment_strip_iterator_p comment_it = new_comment_strip_iterator(&splice_it->base);
include_iterator_p include_it = new_include_iterator(&comment_it->base);
tokenizer_p tokenizer_it = new_tokenizer(&include_it->base);
conditional_iterator_p conditional_it = new_conditional_iterator(include_it, &tokenizer_it->base);
expand_iterator_p expand_it = new_expand_iterator(&conditional_it->base);
token_it = (token_iterator_p)expand_it;
token_it = token_it->next(token_it, TRUE);
if (only_preprocess)
{
output_preprocessor("tcc_p.c");
return TRUE;
}
while (parse_declaration(FALSE))
{
}
if (token_it != 0 && token_it->kind != 0)
{
printf("Parsed %s till %s:%d.%d: kind:%d token:'%s'\n", input_filename, token_it->filename, token_it->line, token_it->column, token_it->kind, token_it->token);
return FALSE;
}
return TRUE;
}
// Code generation function
int indent = 0;
void gen_indent(void)
{
for (int i = 0; i < indent; i++)
fprintf(fcode, " ");
}
void gen_newline(void)
{
fprintf(fcode, "\n");
}
int struct_union_nr = 0;
void gen_start_struct_or_union(void)
{
struct_union_nr++;
}
void gen_enum_decl(decl_p decl)
{
fprintf(fcode, "int %s\n", decl->name);
}
void gen_struct_or_union_member(decl_p decl)
{
decl->su_nr = struct_union_nr;
fprintf(fcode, "const s%d_m_%s %d\n", struct_union_nr, decl->name, decl->pos);
}
void gen_initializer(expr_p expr, type_p type);
void gen_variable_decl(decl_p decl)
{
gen_indent();
if (decl->storage_type == ST_STATIC)
fprintf(fcode, "static ");
else
fprintf(fcode, "int ");
if (decl->type->size > 4)
fprintf(fcode, "%d ", (decl->type->size + 3) / 4);
fprintf(fcode, "%s", decl->name);
if (inside_function && decl->value != 0)
{
fprintf(fcode, " %s ", decl->name);
gen_initializer(decl->value, decl->type);
}
fprintf(fcode, "\n");
}
void gen_function_start(decl_p decl)
{
bool is_main = strcmp(decl->name, "main") == 0;
if (is_main)
fprintf(fcode, "void __init_globals__ ;\n");
type_p type = decl->type;
if (type->members[0]->size > 4)
printf("Warning: return type %s has size %d\n", decl->name, type->members[0]->size);
fprintf(fcode, "void %s\n{\n", decl->name);
indent++;
for (int i = type->nr_decls - 1; i >= 0; i--)
{
decl_p mem_decl = type->decls[i];
if (mem_decl == NULL)
{
gen_indent();
fprintf(fcode, "int __var_args __var_args =:\n");
}
else
{
if (mem_decl->type->size > 4)
printf("Warning: argument %s of %s has size %d\n", mem_decl->name, decl->name, mem_decl->type->size);
gen_indent();
fprintf(fcode, "int %s %s =:\n", mem_decl->name, mem_decl->name);
}
}
if (is_main)
{
gen_indent();
fprintf(fcode, "__init_globals__ ()\n");
gen_indent();
fprintf(fcode, "_sys_env argv ? argc ? 4 * 4 + + = ;\n");
}
if (add_tracing)
{
gen_indent();
fprintf(fcode, "\"Enter %s\\n\" stdout ? fputs () ;\n", decl->name);
}
inside_function = TRUE;
}
void gen_function_end(void)
{
inside_function = FALSE;
indent--;
fprintf(fcode, "\t");
if (add_tracing)
fprintf(fcode, "\"Exit\\n\" stdout ? fputs () ; \n");
fprintf(fcode, "0 return\n}\n");
}
void gen_stats_open(void)
{
gen_indent();
fprintf(fcode, "{\n");
indent++;
}
void gen_stats_close(void)
{
indent--;
gen_indent();
fprintf(fcode, "}\n");
}
bool is_lvalue(expr_p expr)
{
return ( expr->kind == 'i'
|| expr->kind == TK_ARROW
|| expr->kind == '.'
|| expr->kind == '['
|| expr->kind == OPER_STAR)
&& expr->type->kind != TYPE_KIND_ARRAY
&& expr->type->kind != TYPE_KIND_FUNCTION;
}
bool has_error = FALSE;
void expr_print_error(expr_p expr, const char *mesg)
{
printf("%s %d.%d: Error: %s\n", expr->filename, expr->line, expr->column, mesg);
for (int i = 0; i < expr->nr_children; i++)
{
printf("Operand %d: ", i);
expr_print(stdout, expr->children[i]);
printf("\n");
}
has_error = TRUE;
}
void gen_expr(expr_p expr, bool as_value)
{
if (expr == NULL)
return; // TODO: Warning
const char *expr_size_ind = expr->type == NULL ? "" : expr->type->size == 1 ? "1" : expr->type->size == 2 ? "2" : "";
bool multiple = expr->type != NULL && expr->type->size > 4;
switch (expr->kind) {
case 'i':
fprintf(fcode, "%s ", expr->str_val);
break;
case '0':
fprintf(fcode, "%u ", expr->int_val);
break;
case '"':
fprintf(fcode, "\"");
for (int i = 0; i < expr->int_val; i++)
{
const unsigned char ch = expr->str_val[i];
if (ch == '\0')
fprintf(fcode, "\\0");
else if (ch == '\n')
fprintf(fcode, "\\n");
else if (ch == '\r')
fprintf(fcode, "\\r");
else if (ch == '\t')
fprintf(fcode, "\\t");
else if (ch == '\"' || ch == '\\')
fprintf(fcode, "\\%c", ch);
else if (ch < ' ' || ch >= 127)
fprintf(fcode, "\\x%x%x", (ch >> 4) & 0xF, ch & 0xF);
else
fprintf(fcode, "%c", ch);
}
fprintf(fcode, "\" ");
break;
case 'c': // cast
gen_expr(expr->children[0], TRUE);
if (expr->type->kind == TYPE_KIND_BASE)
{
switch (expr->type->base_type)
{
case BT_U8: fprintf(fcode, "0xFF & "); break;
case BT_S8: fprintf(fcode, "char "); break;
case BT_U16: fprintf(fcode, "0xFFFF & "); break;
default: break;
}
}
break;
case ',':
for (int i = 0; i < expr->nr_children; i++)
{
gen_expr(expr->children[i], TRUE);
if (i < expr->nr_children - 1)
fprintf(fcode, "; ");
}
break;
case '!':
case '~':
gen_expr(expr->children[0], TRUE);
fprintf(fcode, "%c ", expr->kind);
break;
case TK_SHR:
if (expr->children[1]->kind == '0' && expr->children[1]->int_val > 31)
{
fprintf(fcode, "0 ");
break;
}
// Fall through
case '+':
case '-':
case '*':
case '^':
case '&':
case '|':
case TK_NE:
case TK_SHL:
case TK_EQ:
gen_expr(expr->children[0], TRUE);
gen_expr(expr->children[1], TRUE);
switch (expr->kind)
{
case '+':
if (expr_is_pointer_size_gt_1(expr->children[0]))
fprintf(fcode, "%d * ", expr->children[0]->type->members[0]->size);
else if (expr_is_pointer_size_gt_1(expr->children[1]))
fprintf(fcode, ">< %d * ", expr->children[1]->type->members[0]->size);
fprintf(fcode, "+ ");
break;
case '-':
if (type_is_pointer(expr->children[0]->type))
{
int base_size = expr->children[0]->type->members[0]->size;
if (type_is_pointer(expr->children[1]->type))
{
fprintf(fcode, "-p ");
if (base_size > 1)
fprintf(fcode, "%d / ", base_size);
}
else
{
if (base_size > 1)
fprintf(fcode, "%d * ", base_size);
fprintf(fcode, "- ");
}
}
else
fprintf(fcode, "- ");
break;
case TK_SHL: fprintf(fcode, "<< "); break;
case TK_SHR: fprintf(fcode, ">> "); break;
case TK_EQ: fprintf(fcode, "== "); break;
case TK_NE: fprintf(fcode, "!= "); break;
default: fprintf(fcode, "%c ", expr->kind); break;
}
break;
case '=':
gen_expr(expr->children[0], FALSE);
if (multiple)
{
gen_expr(expr->children[1], FALSE);
fprintf(fcode, "{ int src src =: int trg trg =: ");
fprintf(fcode, "trg ? src ? ? = ; ");
for (int i = 4; i < expr->type->size; i += 4)
fprintf(fcode, "trg ? %d + src ? %d + ? = ; ", i, i);
fprintf(fcode, "trg ? } ");
}
else
{
gen_expr(expr->children[1], TRUE);
fprintf(fcode, "=%s ", expr_size_ind);
}
break;
case '/':
case '%':
case '<':
case '>':
case TK_LE:
case TK_GE:
gen_expr(expr->children[0], TRUE);
gen_expr(expr->children[1], TRUE);
switch (expr->kind)
{
case TK_LE: fprintf(fcode, "<="); break;
case TK_GE: fprintf(fcode, ">="); break;
default: fprintf(fcode, "%c", expr->kind); break;
}
if ( type_is_signed_integer(expr->children[0]->type)
|| type_is_signed_integer(expr->children[1]->type))
fprintf(fcode, "s");
fprintf(fcode, " ");
break;
case TK_MUL_ASS:
case TK_DIV_ASS:
case TK_MOD_ASS:
case TK_ADD_ASS:
case TK_SUB_ASS:
case TK_SHL_ASS:
case TK_SHR_ASS:
case TK_XOR_ASS:
case TK_BAND_ASS:
case TK_BOR_ASS:
if (multiple)
expr_print_error(expr, "multiple assignment");
gen_expr(expr->children[0], FALSE);
fprintf(fcode, "$ ?%s ", expr_size_ind);
gen_expr(expr->children[1], TRUE);
if ( (expr->kind == TK_ADD_ASS || expr->kind == TK_SUB_ASS)
&& expr_is_pointer_size_gt_1(expr->children[0]))
fprintf(fcode, "%d * ", expr->children[0]->type->members[0]->size);
switch (expr->kind)
{
case TK_SHL_ASS: fprintf(fcode, "<<"); break;
case TK_SHR_ASS: fprintf(fcode, ">>"); break;
default: fprintf(fcode, "%c", expr->kind - TK_ASS); break;
}
if ( (expr->kind == TK_DIV_ASS || expr->kind == TK_MOD_ASS)
&& ( type_is_signed_integer(expr->children[0]->type)
|| type_is_signed_integer(expr->children[1]->type)))
fprintf(fcode, "s");
fprintf(fcode, " =%s ", expr_size_ind);
break;
case TK_ARROW:
gen_expr(expr->children[0], FALSE);
if (is_lvalue(expr->children[0]))
fprintf(fcode, "->s%d_m_%s ", expr->int_val, expr->str_val);
else
fprintf(fcode, "s%d_m_%s + ", expr->int_val, expr->str_val);
break;
case '.':
gen_expr(expr->children[0], FALSE);
fprintf(fcode, "s%d_m_%s + ", expr->int_val, expr->str_val);
break;
case '[':
gen_expr(expr->children[0], TRUE);
gen_expr(expr->children[1], TRUE);
{
int elem_size = array_element_size(expr->type);
if (elem_size > 1)
fprintf(fcode, "%d * ", elem_size);
}
fprintf(fcode, "+ ");
break;
case '(':
if ( expr->children[0]->kind == 'i' && strcmp(expr->children[0]->str_val, "va_start") == 0
&& expr->nr_children > 1 && expr->children[1]->kind == 'i')
{
fprintf(fcode, "%s __var_args ? = ", expr->children[1]->str_val);
}
else
{
type_p func_type = expr->children[0]->type;
int nr_decls = func_type->nr_decls;
bool close_bracket = FALSE;
if (nr_decls > 0 && func_type->decls[nr_decls - 1] == NULL)
{
for (int i = 1; i < nr_decls; i++)
gen_expr(expr->children[i], TRUE);
int nr_var_args = expr->nr_children - nr_decls;
if (nr_var_args == 0)
fprintf(fcode, "0 ");
else
{
fprintf(fcode, "{ int %d __var_args ", nr_var_args);
for (int i = 0; i < nr_var_args; i++)
{
fprintf(fcode, "__var_args ");
if (i > 0)
fprintf(fcode, "%d + ", i * 4);
gen_expr(expr->children[nr_decls + i], TRUE);
fprintf(fcode, "= ; ");
}
fprintf(fcode, "__var_args ");
close_bracket = TRUE;
}
}
else
{
for (int i = 1; i < expr->nr_children; i++)
gen_expr(expr->children[i], TRUE);
}
gen_expr(expr->children[0], FALSE);
if (expr->children[0]->type->kind == TYPE_KIND_POINTER)
fprintf(fcode, "? ");
fprintf(fcode, "() ");
if (close_bracket)
fprintf(fcode, "} ");
}
break;
case OPER_POST_INC:
{
if (multiple)
expr_print_error(expr, "multiple post increment");
gen_expr(expr->children[0], FALSE);
int size = expr_inc_dec_value(expr->children[0]);
fprintf(fcode, "$ ?%s %d + =%s %d - ", expr_size_ind, size, expr_size_ind, size);
break;
}
case OPER_POST_DEC:
{
if (multiple)
expr_print_error(expr, "multiple post decrement");
gen_expr(expr->children[0], FALSE);
int size = expr_inc_dec_value(expr->children[0]);
fprintf(fcode, "$ ?%s %d - =%s %d + ", expr_size_ind, size, expr_size_ind, size);
break;
}
case OPER_PRE_INC:
if (multiple)
expr_print_error(expr, "multiple pre increment");
gen_expr(expr->children[0], FALSE);
fprintf(fcode, "$ ?%s %d + =%s ", expr_size_ind, expr_inc_dec_value(expr->children[0]), expr_size_ind);
break;
case OPER_PRE_DEC:
if (multiple)
expr_print_error(expr, "multiple pre decrement");
gen_expr(expr->children[0], FALSE);
fprintf(fcode, "$ ?%s %d - =%s ", expr_size_ind, expr_inc_dec_value(expr->children[0]), expr_size_ind);
break;
case OPER_MIN:
fprintf(fcode, "0 ");
gen_expr(expr->children[0], TRUE);
fprintf(fcode, "- ");
break;
case OPER_STAR:
gen_expr(expr->children[0], TRUE);
break;
case OPER_ADDR:
gen_expr(expr->children[0], FALSE);
break;
case TK_OR:
gen_expr(expr->children[0], TRUE);
fprintf(fcode, "|| { ");
gen_expr(expr->children[1], TRUE);
fprintf(fcode, "} ");
break;
case TK_AND:
gen_expr(expr->children[0], TRUE);
fprintf(fcode, "&& { ");
gen_expr(expr->children[1], TRUE);
fprintf(fcode, "} ");
break;
case '?':
gen_expr(expr->children[0], TRUE);
fprintf(fcode, "if { ");
gen_expr(expr->children[1], as_value);
fprintf(fcode, "} else { ");
gen_expr(expr->children[2], as_value);
fprintf(fcode, "} ");
break;
case 'l':
for (int i = 0; i < expr->nr_children; i++)
{
gen_expr(expr->children[i], TRUE);
if (i < expr->nr_children - 1)
fprintf(fcode, "; ");
}
break;
default:
if (expr->kind > ' ' && expr->kind < 127)
printf("Warning: expr '%c' not implemented yet\n", expr->kind);
else
printf("Warning: expr %d not implemented yet\n", expr->kind);
fprintf(fcode, "$ ");
break;
}
if (as_value && is_lvalue(expr))
{
if (multiple)
expr_print_error(expr, "multiple get value");
fprintf(fcode, "?%s ", expr_size_ind);
if (expr->type != NULL && expr->type->base_type == BT_S8)
fprintf(fcode, "char ");
}
}
void gen_stat_expr(expr_p expr)
{
if (expr != NULL)
{
gen_indent();
gen_expr(expr, TRUE);
fprintf(fcode, ";"); // ignore_value_expr(expr);
gen_newline();
}
}
void gen_initializer(expr_p expr, type_p type)
{
if (expr->kind == 'l')
{
if (type->kind == TYPE_KIND_ARRAY)
{
for (int i = 0; i < expr->nr_children; i++)
{
if (i + 1 < expr->nr_children)
fprintf(fcode, "$ ");
gen_initializer(expr->children[i], type->members[0]);
if (i + 1 < expr->nr_children)
{
gen_indent();
fprintf(fcode, "%u + ", array_element_size(type->members[0]));
}
}
}
else if (type->kind == TYPE_KIND_STRUCT)
{
int pos = 0;
for (int i = 0; i < expr->nr_children; i++)
{
if (i + 1 < expr->nr_children)
fprintf(fcode, "$ ");
gen_initializer(expr->children[i], type->decls[i]->type);
if (i + 1 < expr->nr_children)
{
gen_indent();
int pos_inc = type->decls[i + 1]->pos - pos;
fprintf(fcode, "%u + ", pos_inc);
pos += pos_inc;
}
}
}
else
fprintf(stderr, "%s Error: unfit type %d for initializer\n", token_it_pos(), type->kind);
}
else
{
gen_expr(expr, TRUE);
if (expr->type == type_char_ptr && type->kind == TYPE_KIND_ARRAY)
fprintf(fcode, "%d strncpy () ;\n", type->size);
else
fprintf(fcode, "=%s ;\n", type != NULL && type->size == 1 ? "1" : "");
}
}
void gen_init_globals(void)
{
fprintf(fcode, "void __init_globals__\n{\n");
indent++;
// Reverse the list of declarations
decl_p next = NULL;
for (decl_p decl = cur_ident_decls; decl != NULL;)
{
decl_p prev = decl->prev;
decl->prev = next;
next = decl;
decl = prev;
}
cur_ident_decls = next;
for (decl_p decl = cur_ident_decls; decl != NULL; decl = decl->prev)
if (decl->value != NULL)
{
gen_indent();
fprintf(fcode, "%s ", decl->name);
gen_initializer(decl->value, decl->type);
}
indent--;
fprintf(fcode, " 0 return\n}\n");
}
// Main
int main(int argc, char *argv[])
{
include_path = malloc(100);
get_env("__TCC_CC__", TRUE);
define_base_types();
add_predefined_types();
fcode = stdout;
bool only_preprocess = FALSE;
for (int i = 1; i < argc; i++)
if (strcmp(argv[i], "-E") == 0)
only_preprocess = TRUE;
else if (strcmp(argv[i], "-T") == 0)
add_tracing = TRUE;
else if (strcmp(argv[i], "-dp") == 0)
opt_trace_parser = TRUE;
else if (strcmp(argv[i], "-D") == 0 && i + 1 < argc)
{
i++;
const char *s = argv[i];
char name[100];
int j = 0;
for (; *s != '\0' && *s != '='; s++)
if (j < 99)
name[j++] = *s;
name[j] = '\0';
env_p env = get_env(name, TRUE);
if (*s == '=')
{
s++;
char value[200];
j = 0;
if (*s == '"')
{
s++;
for (; *s != '"' && *s != '\0'; s++)
if (j < 199)
value[j++] = *s;
value[j] = '\0';
env->tokens = new_str_token(value);
}
else
{
for (; '0' <= *s && *s <= '9'; s++)
if (j < 199)
value[j++] = *s;
value[j] = '\0';
env->tokens = new_int_token(value);
}
}
}
else if (i + 1 < argc && strcmp(argv[i],"-o") == 0)
{
fcode = fopen(argv[++i], "w");
if (fcode == 0)
{
fprintf(fcode, "ERROR: Cannot open file '%s' for writing\n", argv[i]);
return 1;
}
}
else
{
if (!parse_file(argv[i], only_preprocess))
return 1;
}
if (has_error)
return -1;
if (only_preprocess)
return 0;
gen_init_globals();
return 0;
}
/* Stack_C: Compiler for Stack C language to i386 Assembly
This is to adapted to parse output produced by the tcc_cc.c
C compiler. For that reason, it only uses keywords that are
also used in C, where the following keywords are used in a
slightly different way:
- void: A function definition
- int: A variable definition (default 32 bits)
Assembly generation
- ebp register contains pointer to local variable stack
- first location of variable stack used for return address function
Notes:
- http://www.unixwiz.net/techtips/x86-jumps.html
- http://ref.x86asm.net/geek.html
- https://www.felixcloutier.com/x86/
- https://faculty.nps.edu/cseagle/assembly/sys_call.html
- https://defuse.ca/online-x86-assembler.htm
*/
#include <stdio.h>
#include <string.h>
#include <malloc.h>
// Constants
#define MAX_TOKEN_LENGTH 8000
#define MAX_NR_VARIABLES 4000
#define MAX_NR_STATICS 10
#define MAX_VARIABLE_LENGTH 50
#define MAX_NESTING 100
// Boolean definition
#define TRUE 1
#define FALSE 0
typedef int bool;
// Global variables
FILE *fin;
FILE *fout;
FILE *ferr;
char cur_char = '\0';
int cur_char_line = 1;
int cur_char_column = 1;
// Read charachter
void read_char(void)
{
if (feof(fin))
cur_char = '\0';
else
{
if (cur_char == '\n')
{
cur_char_line++;
cur_char_column = 0;
}
cur_char = fgetc(fin);
if (feof(fin))
cur_char = '\0';
else
{
cur_char_column++;
if (cur_char == '\t')
cur_char_column += 4 - ((cur_char_column - 1) % 4);
}
}
}
char sym;
char token[MAX_TOKEN_LENGTH+1];
int token_len = 0;
int int_value;
int cur_line = 0;
int cur_column = 0;
typedef struct
{
const char *name;
char sym;
} Mapping;
#define NR_KEYWORDS 12
Mapping keywords[NR_KEYWORDS] = {
{ "void", 'F' },
{ "const", 'C' },
{ "int", 'V' },
{ "do", 'L' },
{ "break", 'B' },
{ "continue", 'D' },
{ "if", 'I' },
{ "else" , 'E' },
{ "return", 'R' },
{ "goto", 'G' },
{ "static", 'S' },
{ "char", 'K' }
};
#define SYMBOL(X) ('a' + (X))
#define NR_SYMBOLS 23
Mapping symbols[NR_SYMBOLS] = {
#define SYM_REV_ASS SYMBOL(0)
{ "=:", SYM_REV_ASS },
#define SYM_GET_BYTE SYMBOL(1)
{ "?1", SYM_GET_BYTE },
#define SYM_GET_WORD SYMBOL(2)
{ "?2", SYM_GET_WORD },
#define SYM_ASS_BYTE SYMBOL(3)
{ "=1", SYM_ASS_BYTE },
#define SYM_ASS_WORD SYMBOL(4)
{ "=2", SYM_ASS_WORD },
#define SYM_CALL SYMBOL(5)
{ "()", SYM_CALL },
#define SYM_DIV_SIGNED SYMBOL(6)
{ "/s", SYM_DIV_SIGNED },
#define SYM_MOD_SIGNED SYMBOL(7)
{ "%s", SYM_MOD_SIGNED },
#define SYM_EQ SYMBOL(8)
{ "==", SYM_EQ },
#define SYM_NE SYMBOL(9)
{ "!=", SYM_NE },
#define SYM_LE SYMBOL(10)
{ "<=", SYM_LE },
#define SYM_GE SYMBOL(11)
{ ">=", SYM_GE },
#define SYM_LT_SIGNED SYMBOL(12)
{ "<s", SYM_LT_SIGNED },
#define SYM_LE_SIGNED SYMBOL(13)
{ "<=s", SYM_LE_SIGNED },
#define SYM_GT_SIGNED SYMBOL(14)
{ ">s", SYM_GT_SIGNED },
#define SYM_GE_SIGNED SYMBOL(15)
{ ">=s", SYM_GE_SIGNED },
#define SYM_SHL SYMBOL(16)
{ "<<", SYM_SHL },
#define SYM_SHR SYMBOL(17)
{ ">>", SYM_SHR },
#define SYM_LOG_AND SYMBOL(18)
{ "&&", SYM_LOG_AND },
#define SYM_LOG_OR SYMBOL(19)
{ "||", SYM_LOG_OR },
#define SYM_ARROW SYMBOL(20)
{ "->", SYM_ARROW },
#define SYM_SWAP SYMBOL(21)
{ "><", SYM_SWAP },
#define SYM_SUB_PTRS SYMBOL(22)
{ "-p", SYM_SUB_PTRS }
};
int error = 0;
void get_token(void)
{
token_len = 0;
// Skip white spaces, but echo comments starting with # till end of the line
while ((cur_char != '\0' && cur_char <= ' ') || cur_char == '#')
{
if (cur_char == '#')
{
do
{
fputc(cur_char, fout);
read_char();
}
while (cur_char != '\0' && cur_char != '\n');
fputc('\n', fout);
}
else
read_char();
}
// Check for end of file
if (cur_char == '\0')
{
sym = '\0';
return;
}
// Store starting position
cur_line = cur_char_line;
cur_column = cur_char_column;
// Check for identifier
if (('a' <= cur_char && cur_char <= 'z') || ('A' <= cur_char && cur_char <= 'Z') || cur_char == '_')
{
sym = 'A';
do
{
token[token_len++] = cur_char;
read_char();
}
while (('a' <= cur_char && cur_char <= 'z') || ('A' <= cur_char && cur_char <= 'Z') || cur_char == '_' || ('0' <= cur_char && cur_char <= '9'));
token[token_len] = '\0';
if (token_len > MAX_VARIABLE_LENGTH)
{
fprintf(ferr, "ERROR %d: Variable '%s' is longer than %d characters\n", cur_line, token, MAX_VARIABLE_LENGTH);
error = 1;
sym = '\0';
return;
}
// Recognize keywords
for (int i = 0; i < NR_KEYWORDS; i++)
if (strcmp(keywords[i].name, token) == 0)
{
sym = keywords[i].sym;
break;
}
return;
}
// Check for character or string
if (cur_char == '\'' || cur_char == '"')
{
sym = cur_char;
char quote = cur_char;
for (;;)
{
read_char();
if (cur_char == '\0')
break;
if (cur_char == quote)
{
read_char();
break;
}
if (token_len > MAX_TOKEN_LENGTH)
{
fprintf(ferr, "ERROR %d: String longer than %d characters\n", cur_line, MAX_TOKEN_LENGTH);
error = 1;
sym = '\0';
return;
}
if (cur_char == '\\')
{
read_char();
if (cur_char == '0')
cur_char = '\0';
else if (cur_char == 'n')
cur_char = '\n';
else if (cur_char == 'r')
cur_char = '\r';
else if (cur_char == 't')
cur_char = '\t';
else if (cur_char == 'x')
{
read_char();
int v = 0;
if ('0' <= cur_char && cur_char <= '9')
v = 16 * (cur_char - '0');
else if ('A' <= cur_char && cur_char <= 'F')
v = 16 * (cur_char - 'A' + 10);
else if ('a' <= cur_char && cur_char <= 'f')
v = 16 * (cur_char - 'a' + 10);
else
fprintf(ferr, "ERROR %d.%d: Illegal character '%c' after \\x\n", cur_line, cur_column, cur_char);
read_char();
if ('0' <= cur_char && cur_char <= '9')
v += cur_char - '0';
else if ('A' <= cur_char && cur_char <= 'F')
v += cur_char - 'A' + 10;
else if ('a' <= cur_char && cur_char <= 'f')
v += cur_char - 'a' + 10;
else
fprintf(ferr, "ERROR %d.%d: Illegal character '%c' after \\x\n", cur_line, cur_column, cur_char);
cur_char = v;
}
token[token_len++] = cur_char;
}
else
token[token_len++] = cur_char;
}
token[token_len] = '\0';
return;
}
// Check for number or '->' symbol
if (('0' <= cur_char && cur_char <= '9') || cur_char == '-')
{
token[token_len++] = cur_char;
int sign = 1;
if (cur_char == '-')
{
sign = -1;
read_char();
// check of '->' symbol
if (cur_char == '>')
{
sym = SYM_ARROW;
token[token_len++] = cur_char;
token[token_len] = '\0';
read_char();
return;
}
if (cur_char == 'p')
{
sym = SYM_SUB_PTRS;
token[token_len++] = cur_char;
token[token_len] = '\0';
read_char();
return;
}
if (cur_char <= ' ')
{
sym = '-';
token[token_len] = '\0';
return;
}
}
// Check for number
if ('0' <= cur_char && cur_char <= '9')
{
sym = '0';
int_value = 0;
if (cur_char == '0')
{
read_char();
if (cur_char == 'x')
{
read_char();
// Parse hexadecimal number
while (1)
{
if ('0' <= cur_char && cur_char <= '9')
int_value = 16 * int_value + cur_char - '0';
else if ('a' <= cur_char && cur_char <= 'f')
int_value = 16 * int_value + cur_char - 'a' + 10;
else if ('A' <= cur_char && cur_char <= 'F')
int_value = 16 * int_value + cur_char - 'A' + 10;
else
break;
read_char();
}
}
else
{
// Parse octal number
while ('0' <= cur_char && cur_char <= '7')
{
int_value = 8 * int_value + cur_char - '0';
read_char();
}
}
}
else
{
// Parse decimal number
while ('0' <= cur_char && cur_char <= '9')
{
int_value = 10 * int_value + cur_char - '0';
read_char();
}
}
int_value = sign * int_value;
sprintf(token, "%d", int_value);
return;
}
}
// Label start
if (cur_char == ':')
{
sym = ':';
token[1] = '\0';
read_char();
return;
}
// Parse symbol till next white space
sym = ' ';
do
{
token[token_len++] = cur_char;
read_char();
}
while (cur_char > ' ');
token[token_len] = '\0';
if (token_len == 1)
sym = token[0];
else
for (int i = 0; i < NR_SYMBOLS; i++)
if (strcmp(token, symbols[i].name) == 0)
{
sym = symbols[i].sym;
return;
}
}
// Identifiers
typedef struct
{
char type; // 'F': Function, 'C': constant, 'G': global variable, 'L': local variable
char name[MAX_VARIABLE_LENGTH+1];
int pos; // position for local variable
int size; // size for variable
int value; // value for constant, nr for static
} ident_t;
ident_t idents[MAX_NR_VARIABLES];
int nr_idents = 0;
int pos = 0;
typedef struct
{
char name[MAX_VARIABLE_LENGTH+1];
int size;
/* data */
} static_t;
static_t statics[MAX_NR_STATICS];
int nr_statics;
// String constants
typedef struct string_s *string_p;
struct string_s
{
char *value;
int length;
string_p next;
};
string_p strings = 0;
void save_print_string(FILE *fout, const char *s)
{
for (; *s != '\0'; s++)
if (*s == '\n')
fprintf(fout, "\\n");
else if (*s == '\t')
fprintf(fout, "\\t");
else if (*s == '\\' || *s == '"')
fprintf(fout, "\\%c", *s);
else if (*s < ' ')
fprintf(fout, "?");
else
fprintf(fout, "%c", *s);
}
int nr_for_string(const char *s, int length)
{
//printf("# nr_for_string %s\n", s);
int nr = 0;
string_p *ref_string = &strings;
for (; (*ref_string) != 0; ref_string = &(*ref_string)->next, nr++)
if ((*ref_string)->length == length && memcmp((*ref_string)->value, s, length) == 0)
return nr;
(*ref_string) = (string_p)malloc(sizeof(struct string_s));
(*ref_string)->value = (char*)malloc(length + 1);
memcpy((*ref_string)->value, s, length + 1);
(*ref_string)->length = length;
(*ref_string)->next = 0;
return nr;
}
int nesting_depth = 0;
int nesting_nr_vars[MAX_NESTING];
int nesting_pos[MAX_NESTING];
char nesting_type[MAX_NESTING];
int nesting_id[MAX_NESTING];
void add_function(const char *name)
{
idents[nr_idents].type = 'F';
strcpy(idents[nr_idents].name, name);
nr_idents++;
}
int main(int argc, char *argv[])
{
ferr = stderr;
fout = stdout;
fin = stdin;
FILE *fintro = NULL;
for (int i = 1; i < argc; i++)
if (i + 1 < argc && strcmp(argv[i], "-o") == 0)
{
fout = fopen(argv[++i], "w");
if (fout == 0)
{
fprintf(ferr, "ERROR: Cannot open file '%s' for writing\n", argv[i]);
return 1;
}
}
else if (i + 1 < argc && strcmp(argv[i], "-i") == 0)
{
fintro = fopen(argv[++i], "r");
if (fintro == 0)
{
fprintf(ferr, "ERROR: Cannot open file '%s' for input\n", argv[i]);
return 1;
}
}
else
{
fin = fopen(argv[i], "r");
if (fin == 0)
{
fprintf(ferr, "ERROR: Cannot open file '%s' for input\n", argv[i]);
return 1;
}
}
// Add predefined system functions
add_function("sys_int80");
add_function("sys_malloc");
// Copy contents of intro file
if (fintro != 0)
{
for (;;)
{
cur_char = fgetc(fintro);
if (feof(fintro))
break;
fputc(cur_char, fout);
}
fclose(fintro);
}
int id;
char function_name[MAX_VARIABLE_LENGTH+1];
read_char();
get_token();
while (TRUE)
{
if (sym == '\0')
break;
if (sym == 'F')
{
// Function definition
get_token();
if (sym != 'A')
{
fprintf(ferr, "ERROR %d.%d: Expecting name after 'void' for function\n", cur_line, cur_column);
return 1;
}
// Save the function name
strcpy(function_name, token);
// Add it, if is has not been found
{
bool found = FALSE;
for (int i = 0; i < nr_idents; i++)
if (strcmp(token, idents[i].name) == 0)
{
found = TRUE;
break;
}
if (!found)
{
if (nr_idents >= MAX_NR_VARIABLES)
{
fprintf(ferr, "ERROR %d.%d: More than %d variables\n", cur_line, cur_column, MAX_NR_VARIABLES);
return 1;
}
add_function(token);
}
}
get_token();
if (sym == ';')
{
// Forward definition
}
else
{
pos = 1;
if (sym != '{')
{
fprintf(ferr, "ERROR %d.%d: Expect ; or { after function name\n", cur_line, cur_column);
return 1;
}
//printf("start function %s\n", function_name);
// Copy return address to first location in variable stack
fprintf(fout, "\n:f_%s\n\tpop_eax\n\tmov_[ebp],eax\n\tpop_eax\n", function_name);
nesting_type[nesting_depth] = ' ';
nesting_nr_vars[nesting_depth] = nr_idents;
nesting_pos[nesting_depth] = pos;
nesting_depth++;
id = 1;
}
}
else if (sym == 'C')
{
// Constant definition
get_token();
if (sym != 'A')
{
fprintf(ferr, "ERROR %d.%d: Expecting name after 'const'\n", cur_line, cur_column);
return 1;
}
if (nr_idents >= MAX_NR_VARIABLES)
{
fprintf(ferr, "ERROR %d.%d: More than %d variables\n", cur_line, cur_column, MAX_NR_VARIABLES);
return 1;
}
idents[nr_idents].type = 'C';
strcpy(idents[nr_idents].name, token);
get_token();
if (sym != '0')
{
fprintf(ferr, "ERROR %d.%d: Expecting number after 'const' <name>\n", cur_line, cur_column);
return 1;
}
idents[nr_idents].value = int_value;
nr_idents++;
}
else if (sym == 'V' || sym == 'S')
{
char type = sym == 'S' ? 'S' : nesting_depth == 0 ? 'G' : 'L';
// Variable definition
get_token();
int size = 1;
if (sym == '0')
{
size = int_value;
get_token();
}
if (sym != 'A')
{
fprintf(ferr, "ERROR %d.%d: Expecting name after 'int'\n", cur_line, cur_column);
return 1;
}
if (nr_idents >= MAX_NR_VARIABLES)
{
fprintf(ferr, "ERROR %d.%d: More than %d variables\n", cur_line, cur_column, MAX_NR_VARIABLES);
return 1;
}
if (nr_statics >= MAX_NR_STATICS)
{
fprintf(ferr, "ERROR %d.%d: More than %d variables\n", cur_line, cur_column, MAX_NR_STATICS);
return 1;
}
idents[nr_idents].type = type;
strcpy(idents[nr_idents].name, token);
idents[nr_idents].size = size;
if (type == 'S')
{
strcpy(statics[nr_statics].name, token);
statics[nr_statics].size = size;
idents[nr_idents].value = nr_statics;
nr_statics++;
}
else if (nesting_depth > 0)
{
idents[nr_idents].pos = pos;
pos += size;
}
nr_idents++;
}
else if (sym == 'L')
{
get_token();
if (sym != '{')
{
fprintf(ferr, "ERROR %d.%d: expecting '{' after 'do'\n", cur_line, cur_column);
return 1;
}
fprintf(fout, ":_%s_loop%d\n", function_name, id);
if (nesting_depth >= MAX_NESTING)
{
fprintf(ferr, "ERROR %d.%d: Nesting deeper than %d\n", cur_line, cur_column, MAX_NESTING);
return 1;
}
nesting_type[nesting_depth] = 'L';
nesting_id[nesting_depth] = id++;
nesting_nr_vars[nesting_depth] = nr_idents;
nesting_pos[nesting_depth] = pos;
nesting_depth++;
}
else if (sym == 'B' || sym == 'D')
{
int i = nesting_depth - 1;
for (; i >= 0; i--)
if (nesting_type[i] == 'L')
break;
if (i < 0)
{
fprintf(ferr, "ERROR %d.%d: 'break' outside 'loop'\n", cur_line, cur_column);
return 1;
}
if (sym == 'B')
fprintf(fout, "\tjmp %%_%s_loop_end%d\n", function_name, nesting_id[i]);
else
fprintf(fout, "\tjmp %%_%s_loop%d\n", function_name, nesting_id[i]);
}
else if (sym == 'I')
{
get_token();
if (sym != '{')
{
fprintf(ferr, "ERROR %d.%d: expecting '{' after 'if'\n", cur_line, cur_column);
return 1;
}
fprintf(fout, "\ttest_eax,eax # if\n\tpop_eax\n\tje %%_%s_else%d\n", function_name, id);
if (nesting_depth >= MAX_NESTING)
{
fprintf(ferr, "ERROR %d.%d: Nesting deeper than %d\n", cur_line, cur_column, MAX_NESTING);
return 1;
}
nesting_type[nesting_depth] = 'I';
nesting_id[nesting_depth] = id++;
nesting_nr_vars[nesting_depth] = nr_idents;
nesting_pos[nesting_depth] = pos;
nesting_depth++;
}
else if (sym == 'E')
{
fprintf(ferr, "ERROR %d.%d: unexpected 'else'\n", cur_line, cur_column);
return 1;
}
else if (sym == '{')
{
nesting_type[nesting_depth] = ' ';
nesting_nr_vars[nesting_depth] = nr_idents;
nesting_pos[nesting_depth] = pos;
nesting_depth++;
}
else if (sym == '}')
{
if (nesting_depth == 0)
{
fprintf(ferr, "ERROR %d.%d: To many }\n", cur_line, cur_column);
return 1;
}
nesting_depth--;
nr_idents = nesting_nr_vars[nesting_depth];
pos = nesting_pos[nesting_depth];
if (nesting_type[nesting_depth] == 'L')
fprintf(fout, "\tjmp %%_%s_loop%d\n:_%s_loop_end%d\n", function_name, nesting_id[nesting_depth], function_name, nesting_id[nesting_depth]);
else if (nesting_type[nesting_depth] == 'I')
{
get_token();
if (sym == 'E')
{
get_token();
if (sym != '{')
{
fprintf(ferr, "ERROR %d.%d: expecting '{' after 'else'\n", cur_line, cur_column);
return 1;
}
fprintf(fout, "\tjmp %%_%s_else_end%d\n", function_name, nesting_id[nesting_depth]);
fprintf(fout, ":_%s_else%d\n", function_name, nesting_id[nesting_depth]);
if (nesting_depth >= MAX_NESTING)
{
fprintf(ferr, "ERROR %d.%d: Nesting deeper than %d\n", cur_line, cur_column, MAX_NESTING);
return 1;
}
nesting_type[nesting_depth] = 'E';
nesting_nr_vars[nesting_depth] = nr_idents;
nesting_pos[nesting_depth] = pos;
nesting_depth++;
}
else
{
fprintf(fout, ":_%s_else%d # no else\n", function_name, nesting_id[nesting_depth]);
continue; // to skip the call to get_token at the end of the while loop
}
}
else if (nesting_type[nesting_depth] == 'E')
fprintf(fout, ":_%s_else_end%d\n", function_name, nesting_id[nesting_depth]);
else if (nesting_type[nesting_depth] == 'A')
fprintf(fout, ":_%s_and_end%d\n", function_name, nesting_id[nesting_depth]);
else if (nesting_type[nesting_depth] == 'O')
fprintf(fout, ":_%s_or_end%d\n", function_name, nesting_id[nesting_depth]);
}
else if (sym == 'R')
{
fprintf(fout, "\tmov_ebx,[ebp] # return\n\tpush_ebx\n\tret\n");
}
else if (sym == ';')
{
fprintf(fout, "\tpop_eax # ;\n");
}
else if (sym == '$')
{
fprintf(fout, "\tpush_eax # $ (dup)\n");
}
else if (sym == 'G')
{
get_token();
if (sym != 'A')
{
fprintf(ferr, "ERROR %d.%d: Expecting label after 'goto'\n", cur_line, cur_column);
return 0;
}
fprintf(fout, "\tjmp %%l_%s_%s\n", function_name, token);
}
else if (sym == 'A')
{
int i = nr_idents - 1;
for (; i >= 0; i--)
if (strcmp(token, idents[i].name) == 0)
break;
if (i >= 0)
{
//fprintf(fout, "# Ident %s type %c", token, idents[i].type);
//if (idents[i].type == 'L')
// fprintf(fout, "\tpos %d", idents[i].pos);
//else if (idents[i].type == 'C')
// fprintf(fout, "\tvalue %d", idents[i].value);
//fprintf(fout, "\n");
if (idents[i].type == 'G')
fprintf(fout, "\tpush_eax # %s (global)\n\tmov_eax, &g_%s\n", token, token);
else if (idents[i].type == 'F')
fprintf(fout, "\tpush_eax # %s (function)\n\tmov_eax, &f_%s\n", token, token);
else if (idents[i].type == 'C')
fprintf(fout, "\tpush_eax # %u (const %s)\n\tmov_eax, %%%u\n", idents[i].value, token, idents[i].value);
else if (idents[i].type == 'L')
fprintf(fout, "\tpush_eax # %s (local)\n\tlea_eax,[ebp+DWORD] %%%d\n", token, 4 * idents[i].pos);
else if (idents[i].type == 'S')
fprintf(fout, "\tpush_eax # %s (static)\n\tmov_eax, &static_%d_%s\n", token, idents[i].value, token);
}
else
{
fprintf(ferr, "ERROR %d.%d: Ident %s is not defined\n", cur_line, cur_column, token);
error = 1;
}
}
else if (sym == '0')
{
fprintf(fout, "\tpush_eax # %u\n\tmov_eax, %%%u\n", int_value, int_value);
}
else if (sym == '"')
{
int nr = nr_for_string(token, token_len);
fprintf(fout, "\tpush_eax # '");
save_print_string(fout, token);
fprintf(fout, "'\n\tmov_eax, &string_%d\n", nr);
}
else if (sym == '\'')
{
if (' ' < token[0] && token[0] < 127)
fprintf(fout, "\tpush_eax # '%c'\n\tmov_eax, %%%d\n", token[0], token[0]);
else
fprintf(fout, "\tpush_eax # %d\n\tmov_eax, %%%d\n", token[0], token[0]);
}
else if (sym == '?')
{
fprintf(fout, "\tmov_eax,[eax] # ?\n");
}
else if (sym == '=')
{
fprintf(fout, "\tpop_ebx # =\n\tmov_[ebx],eax\n");
}
else if (sym == '+')
{
fprintf(fout, "\tpop_ebx # +\n\tadd_eax,ebx\n");
}
else if (sym == '-' || sym == SYM_SUB_PTRS)
{
fprintf(fout, "\tpop_ebx # -\n\tsub_ebx,eax\n\tmov_eax,ebx\n");
}
else if (sym == '*')
{
fprintf(fout, "\tpop_ebx # *\n\tmul_ebx\n");
}
else if (sym == '&')
{
fprintf(fout, "\tpop_ebx # &\n\tand_eax,ebx\n");
}
else if (sym == '|')
{
fprintf(fout, "\tpop_ebx # |\n\tor_eax,ebx\n");
}
else if (sym == '^')
{
fprintf(fout, "\tpop_ebx # ^\n\txor_eax,ebx\n");
}
else if (sym == '~')
{
fprintf(fout, "\tnot_eax # ~\n");
}
else if (sym == '/')
{
fprintf(fout, "\tmov_ebx,eax # /\n\tpop_eax\n\tmov_edx, %%0\n\tdiv_ebx\n");
}
else if (sym == '%')
{
fprintf(fout, "\tmov_ebx,eax # %%\n\tpop_eax\n\tmov_edx, %%0\n\tdiv_ebx\n\tmov_eax,edx\n");
}
else if (sym == '<')
{
fprintf(fout, "\tpop_ebx # <\n\tcmp_eax_ebx\n\tsetb_al\n\tmovzx_eax,al\n");
}
else if (sym == '>')
{
fprintf(fout, "\tpop_ebx # >\n\tcmp_eax_ebx\n\tseta_al\n\tmovzx_eax,al\n");
}
else if (sym == '!')
{
fprintf(fout, "\ttest_eax,eax # !\n\tsete_al\n\tmovzx_eax,al\n");
}
else if (sym == ':')
{
get_token();
if (sym != 'A')
{
fprintf(ferr, "ERROR %d.%d: Expect identifier after ':", cur_line, cur_column);
return -1;
}
fprintf(fout, ":l_%s_%s\n", function_name, token);
}
else if (sym == SYM_REV_ASS)
{
fprintf(fout, "\tpop_ebx # =:\n\tmov_[eax],ebx\n\tpop_eax\n");
}
else if (sym == SYM_GET_BYTE)
{
fprintf(fout, "\tmov_al,[eax] # ?1\n\tmovzx_eax,al\n");
}
else if (sym == SYM_GET_WORD)
{
fprintf(fout, "\tmov_ax,[eax] # ?2\n\tand_eax, %%65535\n");
}
else if (sym == 'K')
{
fprintf(fout, "\tmovsx_eax,al # char\n");
}
else if (sym == SYM_ASS_BYTE)
{
fprintf(fout, "\tpop_ebx # =1\n\tmov_[ebx],al\n");
}
else if (sym == SYM_ASS_WORD)
{
fprintf(fout, "\tpop_ebx # =2\n\tmov_[ebx],ax\n");
}
else if (sym == SYM_CALL)
{
//int nr = pos - nesting_nr_vars[0] + 1;
//printf(" call at %d offset %d\n", pos, nr);
fprintf(fout, "\tadd_ebp, %%%d # ()\n\tcall_eax\n\tsub_ebp, %%%d\n", 4 * pos, 4 * pos);
}
else if (sym == SYM_DIV_SIGNED)
{
fprintf(fout, "\tmov_ebx,eax # /s\n\tpop_eax\n\tcdq\n\tidiv_ebx\n");
}
else if (sym == SYM_MOD_SIGNED)
{
fprintf(fout, "\tmov_ebx,eax # %%s\n\tpop_eax\n\tcdq\n\tidiv_ebx\n\tmov_eax,edx");
}
else if (sym == SYM_EQ)
{
fprintf(fout, "\tpop_ebx # ==\n\tcmp_eax_ebx\n\tsete_al\n\tmovzx_eax,al\n");
}
else if (sym == SYM_NE)
{
fprintf(fout, "\tpop_ebx # !=\n\tcmp_eax_ebx\n\tsetne_al\n\tmovzx_eax,al\n");
}
else if (sym == SYM_LE)
{
fprintf(fout, "\tpop_ebx # <=\n\tcmp_eax_ebx\n\tsetbe_al\n\tmovzx_eax,al\n");
}
else if (sym == SYM_GE)
{
fprintf(fout, "\tpop_ebx # >=\n\tcmp_eax_ebx\n\tsetae_al\n\tmovzx_eax,al\n");
}
else if (sym == SYM_LT_SIGNED)
{
fprintf(fout, "\tpop_ebx # <s\n\tcmp_eax_ebx\n\tsetl_al\n\tmovzx_eax,al\n");
}
else if (sym == SYM_LE_SIGNED)
{
fprintf(fout, "\tpop_ebx # <=s\n\tcmp_eax_ebx\n\tsetle_al\n\tmovzx_eax,al\n");
}
else if (sym == SYM_GT_SIGNED)
{
fprintf(fout, "\tpop_ebx # >s\n\tcmp_eax_ebx\n\tsetg_al\n\tmovzx_eax,al\n");
}
else if (sym == SYM_GE_SIGNED)
{
fprintf(fout, "\tpop_ebx # >=sfv\n\tcmp_eax_ebx\n\tsetge_al\n\tmovzx_eax,al\n");
}
else if (sym == SYM_SHL)
{
fprintf(fout, "\tmov_ecx,eax # <<\n\tpop_eax\n\tshl_eax,cl\n");
}
else if (sym == SYM_SHR)
{
fprintf(fout, "\tmov_ecx,eax # >>\n\tpop_eax\n\tshr_eax,cl\n");
}
else if (sym == SYM_LOG_AND)
{
get_token();
if (sym != '{')
{
fprintf(ferr, "ERROR %d.%d: expecting '{' after '&&'\n", cur_line, cur_column);
return 1;
}
fprintf(fout, "\ttest_eax,eax # &&\n\tje %%_%s_and_end%d\n\tpop_eax\n", function_name, id);
if (nesting_depth >= MAX_NESTING)
{
fprintf(ferr, "ERROR %d.%d: Nesting deeper than %d\n", cur_line, cur_column, MAX_NESTING);
return 1;
}
nesting_type[nesting_depth] = 'A';
nesting_id[nesting_depth] = id++;
nesting_nr_vars[nesting_depth] = nr_idents;
nesting_pos[nesting_depth] = pos;
nesting_depth++;
}
else if (sym == SYM_LOG_OR)
{
get_token();
if (sym != '{')
{
fprintf(ferr, "ERROR %d.%d: expecting '{' after '||'\n", cur_line, cur_column);
return 1;
}
fprintf(fout, "\ttest_eax,eax # ||\n\tjne %%_%s_or_end%d\n\tpop_eax\n", function_name, id);
if (nesting_depth >= MAX_NESTING)
{
fprintf(ferr, "ERROR %d.%d: Nesting deeper than %d\n", cur_line, cur_column, MAX_NESTING);
return 1;
}
nesting_type[nesting_depth] = 'O';
nesting_id[nesting_depth] = id++;
nesting_nr_vars[nesting_depth] = nr_idents;
nesting_pos[nesting_depth] = pos;
nesting_depth++;
}
else if (sym == SYM_ARROW)
{
get_token();
if (sym != 'A')
{
fprintf(ferr, "ERROR %d.%d: Expecting const ident after '->'. Found %s\n", cur_line, cur_column, token);
return 1;
}
int i = nr_idents - 1;
for (; i >= 0; i--)
if (strcmp(token, idents[i].name) == 0)
break;
if (i >= 0 && idents[i].type == 'C')
{
fprintf(fout, "\tmov_eax,[eax] # ->\n\tadd_eax, %%%d\n", idents[i].value);
}
else
{
fprintf(ferr, "ERROR %d: Ident %s is not defined\n", cur_line, token);
error = 1;
}
}
else if (sym == SYM_SWAP)
{
fprintf(fout, "\tmov_ebx,eax # >< swap\n\tpop_eax\n\tpush_ebx\n");
}
else
{
fprintf(ferr, "ERROR %d.%d: token |%s| not supported\n", cur_line, cur_column, token);
error = 1;
}
get_token();
}
fprintf(fout, "\n:ELF_data\n\n");
fprintf(fout, ":SYS_MALLOC NULL\n");
int nr = 0;
for (string_p string = strings; string != 0; string = string->next, nr++)
{
fprintf(fout, ":string_%d ", nr);
bool safe_string = TRUE;
for (int i = 0; i < string->length; i++)
{
char ch = string->value[i];
if (ch == '"' || ch < ' ')
{
safe_string = FALSE;
break;
}
}
if (safe_string)
fprintf(fout, "\"%s\"", string->value);
else
{
for (int i = 0; i < string->length; i++)
fprintf(fout, "!%u%s", string->value[i], i % 20 == 16 ? "\n " : " ");
fprintf(fout, "!0");
}
fprintf(fout, "\n");
}
for (int i = 0; i < nr_idents; i++)
if (idents[i].type == 'G')
{
fprintf(fout, ":g_%s", idents[i].name);
for (int j = 0; j < idents[i].size; j++)
fprintf(fout, "%sNULL", j % 8 == 0 ? "\n\t" : " ");
fprintf(fout, "\n");
}
for (int i = 0; i < nr_statics; i++)
{
fprintf(fout, ":static_%d_%s", i, statics[i].name);
for (int j = 0; j < statics[i].size; j++)
fprintf(fout, "%sNULL", j % 8 == 0 ? "\n\t" : " ");
fprintf(fout, "\n");
}
fprintf(fout, "\n:ELF_end\n");
fclose(fout);
return error;
}#include <stdio.h>
#include <malloc.h>
#include <string.h>
#ifdef __TCC_CC__
int fgets(char *buffer, int size, FILE *f)
{
int i = 0;
while (i < size - 1)
{
char ch;
if (read(f->fh, &ch, 1) == 0)
{
if (i == 0)
return 0;
break;
}
buffer[i++] = ch;
if (ch == '\n')
break;
}
buffer[i] = '\0';
return 1;
}
#endif
typedef struct define_s *define_p;
struct define_s
{
char name[20];
char value[20];
define_p next;
};
define_p defines = 0;
void add_define(const char* name, const char *value)
{
define_p new_define = (define_p)malloc(sizeof(struct define_s));
strncpy(new_define->name, name, 19);
new_define->name[19] = '\0';
strncpy(new_define->value, value, 19);
new_define->value[19] = '\0';
new_define->next = defines;
defines = new_define;
}
const char* find_define(const char* name)
{
for (define_p def = defines; def != NULL; def = def->next)
if (strcmp(def->name, name) == 0)
return def->value;
return name;
}
void output_hex(char ch, FILE *f)
{
fputc(ch + (ch < 10 ? '0' : 'A' - 10), f);
}
int main(int argc, char *argv[])
{
char *input_files[10];
int nr_input_files = 0;
char *output_file = NULL;
for (int i = 1; i < argc; i++)
if (strcmp(argv[i], "-o") == 0)
{
i++;
output_file = argv[i];
}
else
input_files[nr_input_files++] = argv[i];
FILE *fout = stdout;
if (output_file != NULL)
{
fout = fopen(output_file, "w");
if (fout == NULL)
{
fprintf(stderr, "Error: Cannot open file '%s' for writing", output_file);
return -1;
}
}
for (int i = 0; i < nr_input_files; i++)
{
FILE *fin = fopen(input_files[i], "r");
if (fin == NULL)
{
fprintf(stderr, "Cannot open %s for reading\n", input_files[i]);
return -1;
}
static char line[100000];
while (fgets(line, 99999, fin))
{
if (strncmp(line, "DEFINE ", 7) == 0)
{
char *s = line + 7;
while (*s == ' ') s++;
char *name = s;
while (*s > ' ')
s++;
if (*s <= ' ')
*s++ = '\0';
while (*s == ' ') s++;
char *value = s;
while (*s > ' ')
s++;
if (*s <= ' ')
*s = '\0';
add_define(name, value);
}
else
{
char *s = line;
while (*s == ' ' || *s == '\t')
s++;
while (*s != '\0' && *s != '\r' && *s != '\n' && *s != '#')
{
if (*s <= ' ')
{
fputc(' ', fout);
s++;
}
else if ((*s == '%' || *s == '!') && (('0' <= s[1] && s[1] <= '9') || s[1] == '-'))
{
int nr_bits = *s == '%' ? 32 : 8;
s++;
int sign = 1;
if (*s == '-')
{
sign = -1;
s++;
}
int v = 0;
for (; '0' <= *s && *s <= '9'; s++)
v = 10 * v + *s - '0';
v *= sign;
for (int i = 0; i < nr_bits; i += 8)
{
output_hex((v >> (i + 4)) & 0xf, fout);
output_hex((v >> i) & 0xf, fout);
}
}
else if (*s == '%' || *s == ':' || *s == '#' || *s == '&')
{
do
fputc(*s++, fout);
while (*s > ' ');
}
else if (*s == '"')
{
s++;
while (*s != '"' && *s != '\0')
{
int v = *s++;
output_hex((v >> 4) & 0xf, fout);
output_hex(v & 0xf, fout);
}
fprintf(fout, "00 ");
if (*s == '"')
s++;
}
else
{
int i = 1;
while (s[i] > ' ')
i++;
char ch = s[i];
s[i] = '\0';
fprintf(fout, "%s", find_define(s));
s += i;
*s = ch;
}
}
fputs(" #", fout);
for (char *s = line; *s != '\n'; s++)
if (s > line + 100)
{
fputs(" ...", fout);
break;
}
else
fputc(*s, fout);
fputc('\n', fout);
}
}
fclose(fout);
}
}/* -*- c-file-style: "linux";indent-tabs-mode:t -*- */
/* Copyright (C) 2017 Jeremiah Orians
* Copyright (C) 2017 Jan Nieuwenhuizen <janneke@gnu.org>
* This file is part of mescc-tools
*
* mescc-tools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include "bootstrappable.c"
enum
{
max_string = 4096,
};
int BITSIZE;
int BigEndian;
enum
{
BINARY = 2,
OCTAL = 8,
HEX = 16,
};
/* Strings needed for constants */
char* zero_8;
char* zero_16;
char* zero_32;
char* one_16;
char* one_32;
char* two_8;
char* two_32;
char* three_32;
char* six_32;
char* sixteen_32;
char* twentyfour_32;
/* Imported from stringify.c */
int stringify(char* s, int digits, int divisor, int value, int shift);
void LittleEndian(char* start, int ByteMode);
struct entry
{
struct entry* next;
char* name;
};
FILE* output;
struct entry* jump_table;
int count;
char* entry;
void consume_token(FILE* source_file, char* s)
{
int i = 0;
int c = fgetc(source_file);
require(EOF != c, "Can not have an EOF token\n");
do
{
s[i] = c;
i = i + 1;
require(max_string > i, "Token exceeds token length restriction\n");
c = fgetc(source_file);
if(EOF == c) break;
} while(!in_set(c, " \t\n>"));
}
void storeLabel(FILE* source_file)
{
struct entry* entry = calloc(1, sizeof(struct entry));
/* Prepend to list */
entry->next = jump_table;
jump_table = entry;
/* Store string */
entry->name = calloc((max_string + 1), sizeof(char));
consume_token(source_file, entry->name);
count = count + 1;
}
void line_Comment(FILE* source_file)
{
int c = fgetc(source_file);
while(!in_set(c, "\n\r"))
{
if(EOF == c) break;
c = fgetc(source_file);
}
}
void purge_string(FILE* source_file)
{
int c = fgetc(source_file);
while((EOF != c) && ('"' != c))
{
c = fgetc(source_file);
}
}
void first_pass(struct entry* input)
{
if(NULL == input) return;
first_pass(input->next);
FILE* source_file = fopen(input->name, "r");
if(NULL == source_file)
{
fputs("The file: ", stderr);
fputs(input->name, stderr);
fputs(" can not be opened!\n", stderr);
exit(EXIT_FAILURE);
}
int c;
for(c = fgetc(source_file); EOF != c; c = fgetc(source_file))
{
/* Check for and deal with label */
if(58 == c)
{
storeLabel(source_file);
}
/* Check for and deal with line comments */
else if (c == '#' || c == ';')
{
line_Comment(source_file);
}
else if ('"' == c)
{
purge_string(source_file);
}
}
fclose(source_file);
}
void output_string_table(struct entry* node)
{
fputs("\n# Generated string table\n:ELF_str\n", output);
fputs(zero_8, output);
fputs("\t# NULL string\n", output);
struct entry* i;
for(i = node; NULL != i; i = i->next)
{
fputs(":ELF_str_", output);
fputs(i->name, output);
fputs("\t\"", output);
fputs(i->name, output);
fputs("\" # \"", output);
for (char *s = i->name; *s != '\0'; s++)
if (*s == '\n')
fputs("\\n", output);
else if (*s == '\t')
fputs("\\t", output);
else if (*s >= ' ')
fputc(*s, output);
fputs("\"\n", output);
}
fputs("# END Generated string table\n\n", output);
}
void output_symbol_table(struct entry* node)
{
fputs("\n# Generated symbol table\n:ELF_sym\n# Required NULL symbol entry\n", output);
if(64 == BITSIZE)
{
fputs(zero_32, output);
fputs("\t# st_name\n", output);
fputs(zero_8, output);
fputs("\t# st_info\n", output);
fputs(zero_8, output);
fputs("\t# st_other\n", output);
fputs(one_16, output);
fputs("\t# st_shndx\n", output);
fputs(zero_32, output);
fputc(' ', output);
fputs(zero_32, output);
fputs("\t# st_value\n", output);
fputs(zero_32, output);
fputc(' ', output);
fputs(zero_32, output);
fputs("\t# st_size\n\n", output);
}
else
{
fputs(zero_32, output);
fputs("\t# st_name\n", output);
fputs(zero_32, output);
fputs("\t# st_value\n", output);
fputs(zero_32, output);
fputs("\t# st_size\n", output);
fputs(zero_8, output);
fputs("\t# st_info\n", output);
fputs(zero_8, output);
fputs("\t# st_other\n", output);
fputs(one_16, output);
fputs("\t# st_shndx\n\n", output);
}
struct entry* i;
for(i = node; NULL != i; i = i->next)
{
fputs("%ELF_str_", output);
fputs(i->name, output);
fputs(">ELF_str\t# st_name\n", output);
if(64 == BITSIZE)
{
fputs(two_8, output);
fputs("\t# st_info (FUNC)\n", output);
if(('_' == i->name[0]) && !match(entry, i->name))
{
fputs(two_8, output);
fputs("\t# st_other (hidden)\n", output);
}
else
{
fputs(zero_8, output);
fputs("\t# st_other (other)\n", output);
}
fputs(one_16, output);
fputs("\t# st_shndx\n", output);
fputs("&", output);
fputs(i->name, output);
fputc(' ', output);
fputs(zero_32, output);
fputs("\t# st_value\n", output);
fputs(zero_32, output);
fputc(' ', output);
fputs(zero_32, output);
fputs("\t# st_size (unknown size)\n\n", output);
}
else
{
fputs("&", output);
fputs(i->name, output);
fputs("\t#st_value\n", output);
fputs(zero_32, output);
fputs("\t# st_size (unknown size)\n", output);
fputs(two_8, output);
fputs("\t# st_info (FUNC)\n", output);
if(('_' == i->name[0]) && !match(entry, i->name))
{
fputs(two_8, output);
fputs("\t# st_other (hidden)\n", output);
}
else
{
fputs(zero_8, output);
fputs("\t# st_other (default)\n", output);
}
fputs(one_16, output);
fputs("\t# st_shndx\n\n", output);
}
}
fputs("# END Generated symbol table\n", output);
}
struct entry* reverse_list(struct entry* head)
{
struct entry* root = NULL;
struct entry* next;
while(NULL != head)
{
next = head->next;
head->next = root;
root = head;
head = next;
}
return root;
}
void write_int(char* field, char* label)
{
fputs(field, output);
fputs("\t#", output);
fputs(label, output);
fputc('\n', output);
}
void write_register(char* field, char* label)
{
/* $field section in the section headers are different size for 32 and 64bits */
/* The below is broken for BigEndian */
fputs(field, output);
if(64 == BITSIZE)
{
fputc(' ', output);
fputs(zero_32, output);
}
fputs("\t#", output);
fputs(label, output);
fputc('\n', output);
}
void write_section(char* label, char* name, char* type, char* flags, char* address, char* offset, char* size, char* link, char* info, char* entry)
{
/* Write label */
fputc('\n', output);
fputs(label, output);
fputc('\n', output);
write_int(name, "sh_name");
write_int(type, "sh_type");
write_register(flags, "sh_flags");
write_register(address, "sh_addr");
write_register(offset, "sh_offset");
write_register(size, "sh_size");
write_int(link, "sh_link");
/* Deal with the ugly case of stubs */
fputs(info, output);
fputs("\t#sh_info\n", output);
/* Alignment section in the section headers are different size for 32 and 64bits */
/* The below is broken for BigEndian */
if(64 == BITSIZE)
{
fputs(one_32, output);
fputc(' ', output);
fputs(zero_32, output);
fputs("\t#sh_addralign\n", output);
}
else
{
fputs(one_32, output);
fputs("\t#sh_addralign\n", output);
}
write_register(entry, "sh_entsize");
}
char nibble_to_hex(char nibble)
{
return nibble + (nibble < 10 ? '0' : 'A' - 10);
}
char* get_string(int value, int size, int ByteMode, int shift)
{
char* ch = (char*)malloc(size + 1);
require(NULL != ch, "Exhausted available memory\n");
for (int i = 0; i < size; i += 2)
{
unsigned char byte = (value >> (4 * i)) & 0xff;
ch[i] = nibble_to_hex((byte >> 4) & 0xf);
ch[i + 1] = nibble_to_hex(byte & 0xf);
}
ch[size] = '\0';
return ch;
}
char* setup_string(int value, int number_of_bytes, int ByteMode)
{
int shift;
int size;
if(HEX == ByteMode)
{
size = 2;
shift = 4;
}
else if(OCTAL == ByteMode)
{
size = 3;
shift = 3;
}
else if(BINARY == ByteMode)
{
size = 8;
shift = 1;
}
else
{
fputs("reached impossible mode\n", stderr);
exit(EXIT_FAILURE);
}
return get_string(value, number_of_bytes *size, ByteMode, shift);
}
void setup_strings(int ByteMode)
{
zero_8 = setup_string(0, 1, ByteMode);
zero_16 = setup_string(0, 2, ByteMode);
zero_32 = setup_string(0, 4, ByteMode);
one_16 = setup_string(1, 2, ByteMode);
one_32 = setup_string(1, 4, ByteMode);
two_8 = setup_string(2, 1, ByteMode);
two_32 = setup_string(2, 4, ByteMode);
three_32 = setup_string(3, 4, ByteMode);
six_32 = setup_string(6, 4, ByteMode);
sixteen_32 = setup_string(16, 4, ByteMode);
twentyfour_32 = setup_string(24, 4, ByteMode);
}
/* Standard C main program */
int main(int argc, char **argv)
{
jump_table = NULL;
struct entry* input = NULL;
output = stdout;
char* output_file = "";
entry = "";
BITSIZE = 32;
count = 1;
BigEndian = TRUE;
int ByteMode = HEX;
int set = FALSE;
struct entry* temp;
struct entry* head;
int option_index = 1;
while(option_index <= argc)
{
if(NULL == argv[option_index])
{
option_index = option_index + 1;
}
else if(match(argv[option_index], "-h") || match(argv[option_index], "--help"))
{
fputs("Usage: ", stderr);
fputs(argv[0], stderr);
fputs(" --file FILENAME1 {--file FILENAME2} --output FILENAME\n", stderr);
exit(EXIT_SUCCESS);
}
else if(match(argv[option_index], "--64"))
{
BITSIZE = 64;
option_index = option_index + 1;
}
else if(match(argv[option_index], "-f") || match(argv[option_index], "--file"))
{
temp = calloc(1, sizeof(struct entry));
temp->name = argv[option_index + 1];
temp->next = input;
input = temp;
option_index = option_index + 2;
}
else if(match(argv[option_index], "-o") || match(argv[option_index], "--output"))
{
output_file = argv[option_index + 1];
output = fopen(output_file, "w");
if(NULL == output)
{
fputs("The file: ", stderr);
fputs(input->name, stderr);
fputs(" can not be opened!\n", stderr);
exit(EXIT_FAILURE);
}
option_index = option_index + 2;
}
else if(match(argv[option_index], "-b") || match(argv[option_index], "--binary"))
{
ByteMode = BINARY;
option_index = option_index + 1;
}
else if(match(argv[option_index], "-O") || match(argv[option_index], "--octal"))
{
ByteMode = OCTAL;
option_index = option_index + 1;
}
else if(match(argv[option_index], "-X") || match(argv[option_index], "--hex"))
{
ByteMode = HEX;
option_index = option_index + 1;
}
else if(match(argv[option_index], "--big-endian"))
{
BigEndian = TRUE;
set = TRUE;
option_index = option_index + 1;
}
else if(match(argv[option_index], "--little-endian"))
{
BigEndian = FALSE;
set = TRUE;
option_index = option_index + 1;
}
else if(match(argv[option_index], "-V") || match(argv[option_index], "--version"))
{
fputs("blood-elf 2.0.1\n(Basically Launches Odd Object Dump ExecutabLe Files\n", stdout);
exit(EXIT_SUCCESS);
}
else if(match(argv[option_index], "--entry"))
{
head = calloc(1, sizeof(struct entry));
/* Include _start or any other entry from your .hex2 */
head->next = jump_table;
jump_table = head;
jump_table->name = argv[option_index + 1];
/* However only the last one will be exempt from the _name hidden rule */
entry = argv[option_index + 1];
option_index = option_index + 2;
count = count + 1;
}
else
{
fputs("Unknown option\n", stderr);
exit(EXIT_FAILURE);
}
}
/* Make sure we have a program tape to run */
if (NULL == input)
{
return EXIT_FAILURE;
}
/* Force setting of endianness */
if(!set)
{
fputs("either --little-endian or --big-endian MUST be set\n", stderr);
return EXIT_FAILURE;
}
/* Setup the ugly formating because RISC-V sucks */
setup_strings(ByteMode);
/* Get all of the labels */
first_pass(input);
/* Reverse their order */
jump_table = reverse_list(jump_table);
/* Create sections */
/* Create string names for sections */
fputs("# Generated sections\n:ELF_shstr\n", output);
fputs(zero_8, output);
fputs("\t# NULL\n", output);
fputs(":ELF_shstr__text\n\".text\"\n", output);
fputs(":ELF_shstr__shstr\n\".shstrtab\"\n", output);
fputs(":ELF_shstr__sym\n\".symtab\"\n", output);
fputs(":ELF_shstr__str\n\".strtab\"\n", output);
/* Create NULL section header as is required by the Spec. So dumb and waste of bytes*/
write_section(":ELF_section_headers", zero_32, zero_32, zero_32, zero_32, zero_32, zero_32, zero_32, zero_32, zero_32);
write_section(":ELF_section_header_text", "%ELF_shstr__text>ELF_shstr", one_32, six_32, "&ELF_text", "%ELF_text>ELF_base", "%ELF_data>ELF_text", zero_32, zero_32, zero_32);
write_section(":ELF_section_header_shstr", "%ELF_shstr__shstr>ELF_shstr", three_32, zero_32, "&ELF_shstr", "%ELF_shstr>ELF_base", "%ELF_section_headers>ELF_shstr", zero_32, zero_32, zero_32);
write_section(":ELF_section_header_str", "%ELF_shstr__str>ELF_shstr", three_32, zero_32, "&ELF_str", "%ELF_str>ELF_base", "%ELF_sym>ELF_str", zero_32, zero_32, zero_32);
if(64 == BITSIZE) write_section(":ELF_section_header_sym", "%ELF_shstr__sym>ELF_shstr", two_32, zero_32, "&ELF_sym", "%ELF_sym>ELF_base", "%ELF_end>ELF_sym", three_32, setup_string(count, 4, ByteMode), twentyfour_32);
else write_section(":ELF_section_header_sym", "%ELF_shstr__sym>ELF_shstr", two_32, zero_32, "&ELF_sym", "%ELF_sym>ELF_base", "%ELF_end>ELF_sym", three_32, setup_string(count, 4, ByteMode), sixteen_32);
/* Create dwarf stubs needed for objdump -d to get function names */
output_string_table(jump_table);
output_symbol_table(jump_table);
fputs("\n:ELF_end\n", output);
/* Close output file */
fclose(output);
return EXIT_SUCCESS;
}
/* Copyright (C) 2016 Jeremiah Orians
* This file is part of M2-Planet.
*
* M2-Planet is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* M2-Planet is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with M2-Planet. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
void require(int bool, char* error)
{
if(!bool)
{
fputs(error, stderr);
exit(EXIT_FAILURE);
}
}
int match(char* a, char* b)
{
if((NULL == a) && (NULL == b)) return TRUE;
if(NULL == a) return FALSE;
if(NULL == b) return FALSE;
int i = -1;
do
{
i = i + 1;
if(a[i] != b[i])
{
return FALSE;
}
} while((0 != a[i]) && (0 !=b[i]));
return TRUE;
}
int in_set(int c, char* s)
{
/* NULL set is always false */
if(NULL == s) return FALSE;
while(0 != s[0])
{
if(c == s[0]) return TRUE;
s = s + 1;
}
return FALSE;
}
/* INTERNAL ONLY */
int __index_number(char* s, char c)
{
int i = 0;
while(s[i] != c)
{
i = i + 1;
if(0 == s[i]) return -1;
}
return i;
}
/* INTERNAL ONLY */
int __toupper(int c)
{
if(in_set(c, "abcdefghijklmnopqrstuvwxyz")) return (c & 0xDF);
return c;
}
/* INTERNAL ONLY */
int __set_reader(char* set, int mult, char* input)
{
int n = 0;
int i = 0;
int hold;
int negative_p = FALSE;
if(input[0] == '-')
{
negative_p = TRUE;
i = i + 1;
}
while(in_set(input[i], set))
{
if('_' == input[i])
{
i = i + 1;
continue;
}
n = n * mult;
hold = __index_number(set, __toupper(input[i]));
/* Input managed to change between in_set and index_number */
if(-1 == hold) return 0;
n = n + hold;
i = i + 1;
}
/* loop exited before NULL and thus invalid input */
if(0 != input[i]) return 0;
if(negative_p)
{
n = 0 - n;
}
return n;
}
int strtoint(char *a)
{
int result = 0;
/* If NULL string */
if(0 == a[0])
{
result = 0;
}
/* Deal with binary */
else if ('0' == a[0] && 'b' == a[1])
{
result = __set_reader("01_", 2, a+2);
}
/* Deal with hex */
else if ('0' == a[0] && 'x' == a[1])
{
result = __set_reader("0123456789ABCDEFabcdef_", 16, a+2);
}
/* Deal with octal */
else if('0' == a[0])
{
result = __set_reader("01234567_", 8, a+1);
}
/* Deal with decimal */
else
{
result = __set_reader("0123456789_", 10, a);
}
/* Deal with sign extension for 64bit hosts */
if(0 != (0x80000000 & result)) result = (0xFFFFFFFF << 31) | result;
return result;
}
char* int2str(int x, int base, int signed_p)
{
require(1 < base, "int2str doesn't support a base less than 2\n");
require(37 > base, "int2str doesn't support a base more than 36\n");
/* Be overly conservative and save space for 32binary digits and padding null */
char* p = calloc(34, sizeof(char));
/* if calloc fails return null to let calling code deal with it */
if(NULL == p) return p;
p = p + 32;
unsigned i;
int sign_p = FALSE;
char* table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if(signed_p && (10 == base) && (0 != (x & 0x80000000)))
{
/* Truncate to 31bits */
i = -x & 0x7FFFFFFF;
if(0 == i) return "-2147483648";
sign_p = TRUE;
} /* Truncate to 32bits */
else i = x & (0x7FFFFFFF + 0x80000000); /* M2-Planet/cc_* can't handle large signed numbers in literals */
do
{
p[0] = table[i % base];
p = p - 1;
i = i / base;
} while(0 < i);
if(sign_p)
{
p[0] = '-';
p = p - 1;
}
return p + 1;
}
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#ifdef __TCC_CC__
#define NULL 0
#define STDOUT_FILENO 1
char **_sys_env = 0;
int sys_int80(int a, int b, int c, int d);
void *sys_malloc(size_t size);
#define O_RDONLY 0
#define O_WRITE 001101
#define open(pathname, mode) sys_int80(5, pathname, mode, 0777)
#define close(fd) sys_int80(6, fd, 0, 0)
#define read(fd, buf, count) sys_int80(3, fd, buf, count)
#define write(fd, buf, count) sys_int80(4, fd, buf, count)
#define chmod(fn, mode) sys_int80(15, fn, mode, 0)
void *malloc(size_t size) { return sys_malloc((size + 3) & ~3); }
int strcmp(const char *s1, const char *s2)
{
for (;;)
{
int result = *s1 - *s2;
if (result != 0 || *s1 == 0)
return result;
s1++;
s2++;
}
return 0; // should not get here
}
int strncmp(const char *s1, const char *s2, size_t n)
{
for (; n > 0; n--)
{
int result = *s1 - *s2;
if (result != 0 || *s1 == 0)
return result;
s1++;
s2++;
}
return 0;
}
size_t strlen(const char *s)
{
int len = 0;
for (; *s != '\0'; s++)
len++;
return len;
}
char *strncpy(char *dest, const char *src, size_t n)
{
char *d = (char *)dest;
char *s = (char *)src;
for (int i = 0; i < n; i++)
{
d[i] = s[i];
if (s[i] == '\0')
break;
}
}
#else
#define O_WRITE (O_WRONLY | O_CREAT | O_TRUNC)
#endif
void fhputc(int ch, int fh)
{
write(fh, &ch, 1);
}
int fhgets(char *buffer, int size, int fh)
{
int i = 0;
while (i < size - 1)
{
char ch;
if (read(fh, &ch, 1) == 0)
{
if (i == 0)
return 0;
break;
}
buffer[i++] = ch;
if (ch == '\n')
break;
}
buffer[i] = '\0';
return 1;
}
int ip = 0;
int is_hex(char ch)
{
if ('0' <= ch && ch <= '9')
return ch - '0';
if ('A' <= ch && ch <= 'F')
return ch - ('A' - 10);
return -1;
}
typedef struct label_s *label_p;
struct label_s
{
char *name;
int ip;
label_p next;
};
label_p labels = NULL;
int pos_for_label(const char *name, int len)
{
for (label_p label = labels; label != NULL; label = label->next)
if (strncmp(label->name, name, len) == 0 && label->name[len] == '\0')
return label->ip;
return 0;
}
void process_file(const char *name, int add_labels, void (*output_byte)(unsigned char, int), void (*end_of_line)(const char *s))
{
int f = open(name, O_RDONLY);
if (f < 0)
return;
static char line[1000];
int line_nr = 0;
while (fhgets(line, 999, f))
{
line_nr++;
int space = 0;
char *s = line;
while (*s != '\0' && *s != '#' && *s != '\r' && *s != '\n')
if (*s <= ' ')
{
space = 1;
s++;
}
else if (*s == ':')
{
s++;
char *label = s;
int label_len = 0;
for (; *s > ' '; s++)
label_len++;
if (label_len > 0 && add_labels)
{
label_p new_label = (label_p)malloc(sizeof(struct label_s));
new_label->name = (char*)malloc(label_len + 1);
strncpy(new_label->name, label, label_len);
new_label->ip = ip;
new_label->next = labels;
labels = new_label;
}
}
else if (is_hex(*s) >= 0 && is_hex(s[1]) >= 0)
{
unsigned byte = (is_hex(*s) << 4) | is_hex(s[1]);
if (output_byte != 0)
output_byte(byte, space);
space = 0;
ip++;
s += 2;
}
else if (*s == '&' || *s == '%' || *s == '!')
{
char mode = *s++;
int l = 0;
while (s[l] > ' ' && s[l] != '#' && s[l] != '>')
l++;
int pos = pos_for_label(s, l);
s += l;
ip += 4;
if (mode == '%')
{
if (*s == '>')
{
s++;
l = 0;
while (s[l] > ' ' && s[l] != '#')
l++;
pos -= pos_for_label(s, l);
s += l;
}
else
pos -= ip;
}
int nr_bits = *s == '!' ? 8 : 32;
for (int i = 0; i < nr_bits; i += 8)
{
unsigned byte = (pos >> i) & 0xff;
if (output_byte != 0)
output_byte(byte, space);
space = 0;
}
}
else if (*s == '"')
{
s++;
while (*s != '\0' && *s != '"')
{
if (output_byte != 0)
output_byte(*s, space);
space = 0;
s++;
ip++;
}
if (*s == '"')
s++;
if (output_byte != 0)
output_byte('\0', space);
space = 0;
ip++;
}
else
{
#ifndef __TCC_CC__
fprintf(stderr, "%s:%d: Unknown '%c'(%d) '%s'\n", name, line_nr, *s, *s, line);
#endif
return;
}
while (*s != '\0' && *s != '#' && *s != '\r' && *s != '\n')
s++;
if (end_of_line != 0)
end_of_line(s);
}
close(f);
}
void output_hex(char ch, int fh)
{
fhputc(ch + (ch < 10 ? '0' : 'A' - 10), fh);
}
int col = 1;
int fout = -1;
void output_hex_byte(unsigned char byte, int space)
{
if (space)
{
fhputc(' ', fout);
col++;
}
output_hex((byte >> 4) & 0xf, fout);
output_hex(byte & 0xf, fout);
col += 2;
}
void output_hex_end_of_line(const char *s)
{
for (; col < 30; col++)
fhputc(' ', fout);
while (*s != '\0' && *s != '\r' && *s != '\n')
fhputc(*s++, fout);
fhputc('\n', fout);
col = 1;
}
void output_byte(unsigned char byte, int space)
{
(void)space;
fhputc(byte, fout);
}
int main(int argc, char *argv[])
{
fout = STDOUT_FILENO;
int output_as_hex = 1;
char *input_files[10];
int nr_input_files = 0;
char *output_file = NULL;
for (int i = 1; i < argc; i++)
if (strcmp(argv[i], "-o") == 0)
{
i++;
output_file = argv[i];
}
else
input_files[nr_input_files++] = argv[i];
if (output_file != NULL)
{
fout = open(output_file, O_WRITE);
if (fout < 0)
{
#ifndef __TCC_CC__
fprintf(stderr, "Error: Cannot open file '%s' for writing", output_file);
#endif
return -1;
}
int len = strlen(output_file);
output_as_hex = len > 5 && strcmp(output_file + len - 5, ".hex0") == 0;
}
ip = 0x8048000;
for (int i = 0; i < nr_input_files; i++)
process_file(input_files[i], 1, 0, 0);
ip = 0x8048000;
for (int i = 0; i < nr_input_files; i++)
if (output_as_hex)
process_file(input_files[i], 0, output_hex_byte, output_hex_end_of_line);
else
process_file(input_files[i], 0, output_byte, 0);
if (output_file != NULL)
{
close(fout);
chmod(output_file, 0777);
}
return 0;
}#include <fcntl.h>
#include <unistd.h>
#include <sys/wait.h>
#include <errno.h>
#ifdef __TCC_CC__
char **_sys_env = 0;
int sys_int80(int a, int b, int c, int d);
#define O_RDONLY 0
#define open(pathname, mode) sys_int80(5, pathname, mode, 0777)
#define read(fd, buf, count) sys_int80(3, fd, buf, count)
#define fork() sys_int80(2, 0, 0, 0)
#define execve(program, argv, env) sys_int80(11, program, argv, env)
#define waitpid(f, status, mode) sys_int80(7, f, status, mode)
#endif
int fhgetc(int fh)
{
char ch;
int result = read(fh, &ch, 1);
return result == 1 ? ch : -1;
}
int main(int argc, const char *argv[])
{
const char *input_fn = "kaem.x86";
if (argc > 1)
{
input_fn = argv[1];
}
int fh = open(input_fn, O_RDONLY);
if (fh == 0)
{
return 1;
}
char **env = (char **)argv + (argc + 1);
for (;;)
{
char line[200];
char *s = line;
int ch;
for (;;)
{
ch = fhgetc(fh);
if (ch == -1 || ch == '\n' || ch == '#')
break;
*s++ = ch;
}
*s = '\0';
char *tokens[10];
int nr_tokens = 0;
s = line;
for (;;)
{
while (*s == ' ' || *s == '\t')
s++;
if (*s == '\0')
break;
tokens[nr_tokens++] = s;
while (*s > ' ')
s++;
if (*s == '\0')
break;
*s++ = '\0';
}
tokens[nr_tokens] = 0;
if (nr_tokens > 0)
{
// Execute command
int f = fork();
if (f == -1)
{
return 1;
}
if (f == 0)
{
// We are child
execve(tokens[0], tokens, env);
return 1;
}
// We are parent
int status;
waitpid(f, &status, 0);
if (status != 0)
{
return status;
}
}
if (ch == '#')
{
do
{
ch = fhgetc(fh);
} while (ch != -1 && ch != '\n');
}
if (ch == -1)
break;
}
return 0;
}
#include <fcntl.h>
#include <unistd.h>
#ifdef __TCC_CC__
char **_sys_env = 0;
int sys_int80(int a, int b, int c, int d);
#define O_RDONLY 0
#define O_WRITE 001101
#define open(pathname, mode) sys_int80(5, pathname, mode, 0777)
#define close(fd) sys_int80(6, fd, 0, 0)
#define read(fd, buf, count) sys_int80(3, fd, buf, count)
#define write(fd, buf, count) sys_int80(4, fd, buf, count)
#define chmod(fn, mode) sys_int80(15, fn, mode, 0)
#else
#define O_WRITE (O_WRONLY | O_CREAT | O_TRUNC)
#endif
int main(int argc, char *argv[])
{
int fin = open(argv[1], O_RDONLY);
int fout = open(argv[2], O_WRITE);
int state = 0;
int first = 0;
unsigned char ch;
while (read(fin, &ch, 1))
{
if (ch <= ' ')
;
else if (ch == '#')
{
while (read(fin, &ch, 1) && ch != '\n')
;
}
else
{
if ('0' <= ch && ch <= '9')
ch -= '0';
else
ch -= 'A' - 10;
if (state)
{
ch += first;
write(fout, &ch, 1);
state = 0;
}
else
{
first = ch << 4;
state = 1;
}
}
}
close(fout);
chmod(argv[2], 0777);
}
#! /usr/bin/env bash set +x ./usr/bin/tcc_cc -o ./tmp/catm.sl ./src/stdlib.c ./src/catm.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/catm.sl -o tmp/catm.M1 ./usr/bin/blood-elf --file tmp/catm.M1 --little-endian --output ./tmp/catm.blood_elf ./usr/bin/M1 ./tmp/catm.M1 -o ./tmp/catm.macro ./usr/bin/hex2 -o ./usr/bin/catm ./x86/ELF-x86-debug.hex2 ./tmp/catm.macro ./tmp/catm.blood_elf ./usr/bin/tcc_cc -o ./tmp/match.sl ./src/stdlib.c ./src/match.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/match.sl -o tmp/match.M1 ./usr/bin/blood-elf --file tmp/match.M1 --little-endian --output ./tmp/match.blood_elf ./usr/bin/M1 ./tmp/match.M1 -o ./tmp/match.macro ./usr/bin/hex2 -o ./usr/bin/match ./x86/ELF-x86-debug.hex2 ./tmp/match.macro ./tmp/match.blood_elf ./usr/bin/tcc_cc -o ./tmp/sha256sum.sl ./src/stdlib.c ./src/sha256sum.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/sha256sum.sl -o tmp/sha256sum.M1 ./usr/bin/blood-elf --file tmp/sha256sum.M1 --little-endian --output ./tmp/sha256sum.blood_elf ./usr/bin/M1 ./tmp/sha256sum.M1 -o ./tmp/sha256sum.macro ./usr/bin/hex2 -o ./usr/bin/sha256sum ./x86/ELF-x86-debug.hex2 ./tmp/sha256sum.macro ./tmp/sha256sum.blood_elf ./usr/bin/tcc_cc -o ./tmp/mkdir.sl ./src/stdlib.c ./src/mkdir.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/mkdir.sl -o tmp/mkdir.M1 ./usr/bin/blood-elf --file tmp/mkdir.M1 --little-endian --output ./tmp/mkdir.blood_elf ./usr/bin/M1 ./tmp/mkdir.M1 -o ./tmp/mkdir.macro ./usr/bin/hex2 -o ./usr/bin/mkdir ./x86/ELF-x86-debug.hex2 ./tmp/mkdir.macro ./tmp/mkdir.blood_elf ./usr/bin/tcc_cc -o ./tmp/cp.sl ./src/stdlib.c ./src/cp.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/cp.sl -o tmp/cp.M1 ./usr/bin/blood-elf --file tmp/cp.M1 --little-endian --output ./tmp/cp.blood_elf ./usr/bin/M1 ./tmp/cp.M1 -o ./tmp/cp.macro ./usr/bin/hex2 -o ./usr/bin/cp ./x86/ELF-x86-debug.hex2 ./tmp/cp.macro ./tmp/cp.blood_elf ./usr/bin/tcc_cc -o ./tmp/chmod.sl ./src/stdlib.c ./src/chmod.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/chmod.sl -o tmp/chmod.M1 ./usr/bin/blood-elf --file tmp/chmod.M1 --little-endian --output ./tmp/chmod.blood_elf ./usr/bin/M1 ./tmp/chmod.M1 -o ./tmp/chmod.macro ./usr/bin/hex2 -o ./usr/bin/chmod ./x86/ELF-x86-debug.hex2 ./tmp/chmod.macro ./tmp/chmod.blood_elf ./usr/bin/tcc_cc -o ./tmp/rm.sl ./src/stdlib.c ./src/rm.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/rm.sl -o tmp/rm.M1 ./usr/bin/blood-elf --file tmp/rm.M1 --little-endian --output ./tmp/rm.blood_elf ./usr/bin/M1 ./tmp/rm.M1 -o ./tmp/rm.macro ./usr/bin/hex2 -o ./usr/bin/rm ./x86/ELF-x86-debug.hex2 ./tmp/rm.macro ./tmp/rm.blood_elf ./usr/bin/tcc_cc -o ./tmp/untar.sl ./src/stdlib.c ./src/untar.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/untar.sl -o tmp/untar.M1 ./usr/bin/blood-elf --file tmp/untar.M1 --little-endian --output ./tmp/untar.blood_elf ./usr/bin/M1 ./tmp/untar.M1 -o ./tmp/untar.macro ./usr/bin/hex2 -o ./usr/bin/untar ./x86/ELF-x86-debug.hex2 ./tmp/untar.macro ./tmp/untar.blood_elf ./usr/bin/tcc_cc -o ./tmp/ungz.sl ./src/stdlib.c ./src/ungz.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/ungz.sl -o tmp/ungz.M1 ./usr/bin/blood-elf --file tmp/ungz.M1 --little-endian --output ./tmp/ungz.blood_elf ./usr/bin/M1 ./tmp/ungz.M1 -o ./tmp/ungz.macro ./usr/bin/hex2 -o ./usr/bin/ungz ./x86/ELF-x86-debug.hex2 ./tmp/ungz.macro ./tmp/ungz.blood_elf ./usr/bin/tcc_cc -o ./tmp/unxz.sl ./src/stdlib.c ./src/unxz.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/unxz.sl -o tmp/unxz.M1 ./usr/bin/blood-elf --file tmp/unxz.M1 --little-endian --output ./tmp/unxz.blood_elf ./usr/bin/M1 ./tmp/unxz.M1 -o ./tmp/unxz.macro ./usr/bin/hex2 -o ./usr/bin/unxz ./x86/ELF-x86-debug.hex2 ./tmp/unxz.macro ./tmp/unxz.blood_elf ./usr/bin/tcc_cc -o ./tmp/unbz2.sl ./src/stdlib.c ./src/unbz2.c ./usr/bin/stack_c -i ./x86/stack_c_intro.M1 ./tmp/unbz2.sl -o tmp/unbz2.M1 ./usr/bin/blood-elf --file tmp/unbz2.M1 --little-endian --output ./tmp/unbz2.blood_elf ./usr/bin/M1 ./tmp/unbz2.M1 -o ./tmp/unbz2.macro ./usr/bin/hex2 -o ./usr/bin/unbz2 ./x86/ELF-x86-debug.hex2 ./tmp/unbz2.macro ./tmp/unbz2.blood_elf
/* Copyright (C) 2019 Jeremiah Orians
* This file is part of mescc-tools
*
* mescc-tools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#define BUFFER_SIZE 4096
int main(int argc, char** argv)
{
if(2 > argc)
{
fputs("catm requires 2 or more arguments\n", stderr);
exit(EXIT_FAILURE);
}
int output = open(argv[1], 577 , 384);
if(-1 == output)
{
fputs("The file: ", stderr);
fputs(argv[1], stderr);
fputs(" is not a valid output file name\n", stderr);
exit(EXIT_FAILURE);
}
int i;
int bytes;
char* buffer = calloc(BUFFER_SIZE + 1, sizeof(char));
int input;
for(i = 2; i < argc ; i = i + 1)
{
input = open(argv[i], 0, 0);
if(-1 == input)
{
fputs("The file: ", stderr);
fputs(argv[i], stderr);
fputs(" is not a valid input file name\n", stderr);
exit(EXIT_FAILURE);
}
keep:
bytes = read(input, buffer, BUFFER_SIZE);
write(output, buffer, bytes);
if(BUFFER_SIZE == bytes) goto keep;
}
free(buffer);
return EXIT_SUCCESS;
}
/* Copyright (C) 2021 Andrius Å tikonas
* This file is part of mescc-tools-extra
*
* mescc-tools-extra is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools-extra is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools-extra. If not, see <http://www.gnu.org/licenses/>.
*/
/********************************************************************************
* "match" can be used to compare strings. It is useful to write conditional *
* code in kaem. *
* *
* Usage: match string1 string2 *
* Returns: 0 if strings match *
********************************************************************************/
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
/* ensure correct number of arguments */
if(argc != 3)
{
fputs("match needs exactly 2 arguments.\n", stderr);
return 2;
}
/* deal with badly behaving shells calling */
if(NULL == argv[1])
{
fputs("You passed a null string\n", stderr);
return 3;
}
if(NULL == argv[2])
{
fputs("You passed a null string\n", stderr);
return 3;
}
return strcmp(argv[1], argv[2]) != 0;
}
/* Copyright (C) 2021 Bastian Bittorf <bb@npl.de>
* Copyright (C) 2021 Alain Mosnier <alain@wanamoon.net>
* Copyright (C) 2017-2021 Jan Venekamp
* Copyright (C) 2021 Jeremiah Orians
* This file is part of mescc-tools
*
* mescc-tools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "bootstrappable.c"
#define CHUNK_SIZE 64
#define TOTAL_LEN_LEN 8
int mask;
/*
* Initialize array of round constants:
* (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):
*/
unsigned* init_k(void)
{
unsigned* k = calloc(65, sizeof(unsigned));
k[0] = 0x428a2f98;
k[1] = 0x71374491;
k[2] = 0xb5c0fbcf;
k[3] = 0xe9b5dba5;
k[4] = 0x3956c25b;
k[5] = 0x59f111f1;
k[6] = 0x923f82a4;
k[7] = 0xab1c5ed5;
k[8] = 0xd807aa98;
k[9] = 0x12835b01;
k[10] = 0x243185be;
k[11] = 0x550c7dc3;
k[12] = 0x72be5d74;
k[13] = 0x80deb1fe;
k[14] = 0x9bdc06a7;
k[15] = 0xc19bf174;
k[16] = 0xe49b69c1;
k[17] = 0xefbe4786;
k[18] = 0x0fc19dc6;
k[19] = 0x240ca1cc;
k[20] = 0x2de92c6f;
k[21] = 0x4a7484aa;
k[22] = 0x5cb0a9dc;
k[23] = 0x76f988da;
k[24] = 0x983e5152;
k[25] = 0xa831c66d;
k[26] = 0xb00327c8;
k[27] = 0xbf597fc7;
k[28] = 0xc6e00bf3;
k[29] = 0xd5a79147;
k[30] = 0x06ca6351;
k[31] = 0x14292967;
k[32] = 0x27b70a85;
k[33] = 0x2e1b2138;
k[34] = 0x4d2c6dfc;
k[35] = 0x53380d13;
k[36] = 0x650a7354;
k[37] = 0x766a0abb;
k[38] = 0x81c2c92e;
k[39] = 0x92722c85;
k[40] = 0xa2bfe8a1;
k[41] = 0xa81a664b;
k[42] = 0xc24b8b70;
k[43] = 0xc76c51a3;
k[44] = 0xd192e819;
k[45] = 0xd6990624;
k[46] = 0xf40e3585;
k[47] = 0x106aa070;
k[48] = 0x19a4c116;
k[49] = 0x1e376c08;
k[50] = 0x2748774c;
k[51] = 0x34b0bcb5;
k[52] = 0x391c0cb3;
k[53] = 0x4ed8aa4a;
k[54] = 0x5b9cca4f;
k[55] = 0x682e6ff3;
k[56] = 0x748f82ee;
k[57] = 0x78a5636f;
k[58] = 0x84c87814;
k[59] = 0x8cc70208;
k[60] = 0x90befffa;
k[61] = 0xa4506ceb;
k[62] = 0xbef9a3f7;
k[63] = 0xc67178f2;
return k;
}
unsigned* init_h(void)
{
unsigned* h = calloc(9, sizeof(unsigned));
h[0] = 0x6a09e667;
h[1] = 0xbb67ae85;
h[2] = 0x3c6ef372;
h[3] = 0xa54ff53a;
h[4] = 0x510e527f;
h[5] = 0x9b05688c;
h[6] = 0x1f83d9ab;
h[7] = 0x5be0cd19;
return h;
}
struct buffer_state
{
char* p;
size_t len;
size_t total_len;
int single_one_delivered; /* bool */
int total_len_delivered; /* bool */
};
unsigned right_rot(unsigned value, unsigned count)
{
/*
* Defined behaviour in standard C for all count where 0 < count < 32,
* which is what we need here.
*/
value &= mask;
int hold1 = (value >> count) & mask;
int hold2 = (value << (32 - count)) & mask;
int hold = (hold1 | hold2) & mask;
return hold;
}
void init_buf_state(struct buffer_state * state, char* input, size_t len)
{
state->p = input;
state->len = len;
state->total_len = len;
state->single_one_delivered = 0;
state->total_len_delivered = 0;
}
/* Return value: bool */
int calc_chunk(char* chunk, struct buffer_state * state)
{
size_t space_in_chunk;
if(state->total_len_delivered)
{
return 0;
}
if(state->len >= CHUNK_SIZE)
{
memcpy(chunk, state->p, CHUNK_SIZE);
state->p += CHUNK_SIZE;
state->len -= CHUNK_SIZE;
return 1;
}
memcpy(chunk, state->p, state->len);
chunk += state->len;
space_in_chunk = CHUNK_SIZE - state->len;
state->p += state->len;
state->len = 0;
/* If we are here, space_in_chunk is one at minimum. */
if(!state->single_one_delivered)
{
chunk[0] = 0x80;
chunk += 1;
space_in_chunk -= 1;
state->single_one_delivered = 1;
}
/*
* Now:
* - either there is enough space left for the total length, and we can conclude,
* - or there is too little space left, and we have to pad the rest of this chunk with zeroes.
* In the latter case, we will conclude at the next invocation of this function.
*/
if(space_in_chunk >= TOTAL_LEN_LEN)
{
size_t left = space_in_chunk - TOTAL_LEN_LEN;
size_t len = state->total_len;
int i;
memset(chunk, 0x00, left);
chunk += left;
/* Storing of len * 8 as a big endian 64-bit without overflow. */
chunk[7] = (len << 3);
len >>= 5;
for(i = 6; i >= 0; i -= 1)
{
chunk[i] = len;
len >>= 8;
}
state->total_len_delivered = 1;
}
else
{
memset(chunk, 0x00, space_in_chunk);
}
return 1;
}
/*
* Limitations:
* - Since input is a pointer in RAM, the data to hash should be in RAM, which could be a problem
* for large data sizes.
* - SHA algorithms theoretically operate on bit strings. However, this implementation has no support
* for bit string lengths that are not multiples of eight, and it really operates on arrays of bytes.
* In particular, the len parameter is a number of bytes.
*/
void calc_sha_256(char* hash, char* input, size_t len)
{
/*
* Note 1: All integers (expect indexes) are 32-bit unsigned integers and addition is calculated modulo 2^32.
* Note 2: For each round, there is one round constant k[i] and one entry in the message schedule array w[i], 0 = i = 63
* Note 3: The compression function uses 8 working variables, a through h
* Note 4: Big-endian convention is used when expressing the constants in this pseudocode,
* and when parsing message block data from bytes to words, for example,
* the first word of the input message "abc" after padding is 0x61626380
*/
/*
* Initialize hash values:
* (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
*/
unsigned* k = init_k();
unsigned* h = init_h();
unsigned i;
unsigned j;
unsigned hold1;
unsigned hold2;
/* 512-bit chunks is what we will operate on. */
char* chunk = calloc(65, sizeof(char));
struct buffer_state* state = calloc(1, sizeof(struct buffer_state));
init_buf_state(state, input, len);
unsigned* ah = calloc(9, sizeof(unsigned));
char *p;
unsigned* w = calloc(17, sizeof(unsigned));
unsigned s0;
unsigned s1;
unsigned ch;
unsigned temp1;
unsigned temp2;
unsigned maj;
while(calc_chunk(chunk, state))
{
p = chunk;
/* Initialize working variables to current hash value: */
for(i = 0; i < 8; i += 1)
{
ah[i] = h[i];
}
/* Compression function main loop: */
for(i = 0; i < 4; i += 1)
{
/*
* The w-array is really w[64], but since we only need
* 16 of them at a time, we save stack by calculating
* 16 at a time.
*
* This optimization was not there initially and the
* rest of the comments about w[64] are kept in their
* initial state.
*/
/*
* create a 64-entry message schedule array w[0..63] of 32-bit words
* (The initial values in w[0..63] don't matter, so many implementations zero them here)
* copy chunk into first 16 words w[0..15] of the message schedule array
*/
for(j = 0; j < 16; j += 1)
{
if(i == 0)
{
w[j] = ((p[0] & 0xFF) << 24) | ((p[1] & 0xFF) << 16) | ((p[2] & 0xFF) << 8) | (p[3] & 0xFF);
p += 4;
}
else
{
/* Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array: */
hold1 = (j + 1) & 0xf;
hold2 = w[hold1];
s0 = right_rot(hold2, 7) ^ right_rot(hold2, 18) ^ ((hold2 & mask) >> 3);
hold1 = (j + 14) & 0xf;
hold2 = w[hold1];
s1 = right_rot(hold2, 17) ^ right_rot(hold2, 19) ^ ((hold2 & mask) >> 10);
w[j] += s0 + w[(j + 9) & 0xf] + s1;
}
s1 = right_rot(ah[4], 6) ^ right_rot(ah[4], 11) ^ right_rot(ah[4], 25);
ch = (ah[4] & ah[5]) ^ (~ah[4] & ah[6]);
temp1 = ah[7] + s1 + ch + k[i << 4 | j] + w[j];
s0 = right_rot(ah[0], 2) ^ right_rot(ah[0], 13) ^ right_rot(ah[0], 22);
maj = (ah[0] & ah[1]) ^ (ah[0] & ah[2]) ^ (ah[1] & ah[2]);
temp2 = s0 + maj;
ah[7] = ah[6];
ah[6] = ah[5];
ah[5] = ah[4];
ah[4] = ah[3] + temp1;
ah[3] = ah[2];
ah[2] = ah[1];
ah[1] = ah[0];
ah[0] = temp1 + temp2;
}
}
/* Add the compressed chunk to the current hash value: */
for(i = 0; i < 8; i += 1)
{
h[i] += ah[i];
}
}
/* Produce the final hash value (big-endian): */
i = 0;
for(j = 0; i < 8; i += 1)
{
hash[j] = ((h[i] >> 24) & 0xFF);
j += 1;
hash[j] = ((h[i] >> 16) & 0xFF);
j += 1;
hash[j] = ((h[i] >> 8) & 0xFF);
j += 1;
hash[j] = (h[i] & 0xFF);
j += 1;
}
}
struct list
{
int found;
char* name;
FILE* f;
size_t size;
char* buffer;
char* hash;
struct list* next;
};
void bad_checkfile(char* filename)
{
fputs(filename, stdout);
fputs(": no properly formatted SHA256 checksum lines found\n", stdout);
}
int hex2int(char c, char* filename)
{
if((c >= '0') && (c <= '9')) return (c - 48);
else if((c >= 'a') && (c <= 'f')) return (c - 87);
else if ((c >= 'F') && (c <= 'F')) return (c - 55);
bad_checkfile(filename);
exit(EXIT_FAILURE);
}
char* hash_to_string(char* a)
{
char* table = "0123456789abcdef";
char* r = calloc(66, sizeof(char));
int i;
int j = 0;
int c;
for(i = 0; i < 32; i += 1)
{
c = a[i] & 0xFF;
r[j] = table[(c >> 4)];
j += 1;
r[j] = table[(c & 0xF)];
j += 1;
}
return r;
}
int check_file(char* b, char* filename)
{
int r = TRUE;
size_t i;
int hold1;
int hold2;
FILE* f;
char* name = calloc(4097, sizeof(char));
char* hash = calloc(33, sizeof(char));
char* hash2 = calloc(33, sizeof(char));
size_t size;
char* buffer;
go_again:
for(i = 0; i < 32; i += 1)
{
hold1 = hex2int(b[0], filename);
hold2 = hex2int(b[1], filename);
hash[i] = (hold1 << 4) + hold2;
b += 2;
}
if((' ' != b[0]) || (' ' != b[1]))
{
bad_checkfile(filename);
exit(EXIT_FAILURE);
}
b += 2;
for(i = 0; i < 4096; i += 1)
{
if('\n' == b[0])
{
name[i] = 0;
b += 1;
break;
}
name[i] = b[0];
b += 1;
}
f = fopen(name, "r");
if(NULL == f)
{
fputs(name, stdout);
fputs(": No such file or directory\n", stdout);
exit(EXIT_FAILURE);
}
else
{
fseek(f, 0, SEEK_END);
size = ftell(f);
fseek(f, 0, SEEK_SET);
buffer = calloc(size + 1, sizeof(char));
fread(buffer, sizeof(char), size, f);
calc_sha_256(hash2, buffer, size);
if(match(hash_to_string(hash), hash_to_string(hash2)))
{
fputs(name, stdout);
fputs(": OK\n", stdout);
}
else
{
fputs(name, stdout);
fputs(": FAILED\nWanted: ", stdout);
fputs(hash_to_string(hash), stdout);
fputs("\nReceived: ", stdout);
fputs(hash_to_string(hash2), stdout);
fputs("\n", stdout);
r = FALSE;
}
}
if(0 == b[0]) return r;
goto go_again;
}
/* reverse the linked list */
void reverse(struct list** head)
{
struct list* prev = NULL;
struct list* current = *head;
struct list* next = NULL;
while (current != NULL)
{
next = current->next;
current->next = prev;
prev = current;
current = next;
}
*head = prev;
}
int main(int argc, char **argv)
{
struct list* l = NULL;
struct list* t = NULL;
size_t read;
int check = FALSE;
int r = TRUE;
char* output_file = "";
FILE* output = stdout;
mask = (0x7FFFFFFF << 1) | 0x1;
int i = 1;
while(i <= argc)
{
if(NULL == argv[i])
{
i += 1;
}
else if(match(argv[i], "-c") || match(argv[i], "--check"))
{
check = TRUE;
i += 1;
}
else if (match(argv[i], "-o") || match(argv[i], "--output"))
{
output_file = argv[i + 1];
i += 2;
if (output != stdout) {
fclose(output);
}
output = fopen(output_file, "w");
require(output != NULL, "Output file cannot be opened!\n");
}
else if(match(argv[i], "-h") || match(argv[i], "--help"))
{
fputs("Usage: sha256sum <file> [--check]\n", stdout);
exit(EXIT_SUCCESS);
}
else
{
t = calloc(1, sizeof(struct list));
t->hash = calloc(33, sizeof(char));
t->name = argv[i];
t->f = fopen(t->name, "r");
if(NULL != t->f)
{
t->found = TRUE;
fseek(t->f, 0, SEEK_END);
t->size = ftell(t->f);
fseek(t->f, 0, SEEK_SET);
t->buffer = calloc(t->size + 1, sizeof(char));
read = fread(t->buffer, sizeof(char), t->size, t->f);
}
t->next = l;
l = t;
i += 1;
}
}
reverse(&l);
if(check)
{
while(NULL != l)
{
if(l->found)
{
if(!check_file(l->buffer, l->name)) r = FALSE;
}
else
{
fputs(l->name, stdout);
fputs(": No such file or directory\n", stdout);
exit(EXIT_FAILURE);
}
l = l->next;
}
}
else
{
while(NULL != l)
{
if(l->found)
{
calc_sha_256(l->hash, l->buffer, l->size);
fputs(hash_to_string(l->hash), output);
fputs(" ", output);
fputs(l->name, output);
fputc('\n', output);
}
else
{
fputs(l->name, output);
fputs(": No such file or directory\n", output);
exit(EXIT_FAILURE);
}
l = l->next;
}
}
if (output != stdout) {
fclose(output);
}
if(r) return 0;
else return 1;
}
/* Copyright (C) 2009 Tim Kientzle
* Copyright (C) 2021 Jeremiah Orians
* Copyright (C) 2021 Andrius Å tikonas
* This file is part of mescc-tools-extra
*
* mescc-tools-extra is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools-extra is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools-extra. If not, see <http://www.gnu.org/licenses/>.
*/
/********************************************************************************
* "mkdir" can be used to create empty directories. It can also create *
* required parent directories. *
* *
* Usage: mkdir <dir1>/<dir2> <dir3> *
* *
* These are all highly standard and portable headers. *
********************************************************************************/
#include <stdio.h>
#include <string.h>
/* This is for mkdir(); this may need to be changed for some platforms. */
#include <sys/stat.h> /* For mkdir() */
#include <stdlib.h>
#include "bootstrappable.c"
#define MAX_STRING 4096
int parents;
/* Create a directory, including parent directories as necessary. */
void create_dir(char *pathname, int mode)
{
char *p;
int r;
/* Strip trailing '/' */
if(pathname[strlen(pathname) - 1] == '/')
{
pathname[strlen(pathname) - 1] = '\0';
}
/* Try creating the directory. */
printf("mkdir %s %d : %d\n", pathname, mode, r);
r = mkdir(pathname, mode);
printf("mkdir %s %d : %d\n", pathname, mode, r);
if((r != 0) && parents)
{
/* On failure, try creating parent directory. */
p = strrchr(pathname, '/');
if(p != NULL)
{
p[0] = '\0';
create_dir(pathname, mode);
p[0] = '/';
r = mkdir(pathname, mode);
}
}
if((r != 0) && !parents)
{
fputs("Could not create directory ", stderr);
fputs(pathname, stderr);
fputc('\n', stderr);
exit(EXIT_FAILURE);
}
}
int main(int argc, char **argv)
{
/* This adds some quasi-compatibility with GNU coreutils' mkdir. */
parents = FALSE;
int i;
int mode = 0755;
char* raw_mode = NULL;
for(i = 1; argc > i; i = i + 1)
{
if(match(argv[i], "-p") || match(argv[i], "--parents"))
{
parents = TRUE;
}
else if(match(argv[i], "-h") || match(argv[i], "--help"))
{
fputs("mescc-tools-extra mkdir supports --parents and --mode 0750 "
"but the last argument always must be the directly to make\n", stdout);
return 0;
}
else if(match(argv[i], "-v") || match(argv[i], "--version"))
{
fputs("mescc-tools-extra mkdir version 1.4.0\n", stdout);
return 0;
}
else if(match(argv[i], "-m") || match(argv[i], "--mode"))
{
raw_mode = calloc(MAX_STRING, sizeof(char));
require(raw_mode != NULL, "Memory initialization of mode failed\n");
/* We need to indicate it is octal */
strcat(raw_mode, "0");
strcat(raw_mode, argv[i+1]);
mode = strtoint(raw_mode);
i = i + 1;
}
else create_dir(argv[i], mode);
}
return 0;
}
/* Copyright (C) 2020 fosslinux
* This file is part of mescc-tools
*
* mescc-tools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include "bootstrappable.c"
#define MAX_STRING 4096
#define MAX_ARRAY 256
/* Globals */
int verbose;
/* UTILITY FUNCTIONS */
/* Function to find a character's position in a string (last match) */
int find_last_char_pos(char* string, char a)
{
int i = strlen(string) - 1;
if(i < 0) return i;
while(i >= 0)
{
/*
* This conditional should be in the while conditional but we are
* running into the M2-Planet short-circuit bug.
*/
if(a == string[i]) break;
i = i - 1;
}
return i;
}
/* Function to find the length of a char**; an array of strings */
int array_length(char** array)
{
int length = 0;
while(array[length] != NULL)
{
length = length + 1;
}
return length;
}
/* PROCESSING FUNCTIONS */
char* directory_dest(char* dest, char* source, int require_directory)
{
/*
* First, check if it is a directory to copy to.
* We have two ways of knowing this:
* - If the destination ends in a slash, the user has explicitly said
* it is a directory.
* - Normally we would use stat() but we don't want to force support for
* that syscall onto the kernel, so we just attempt to chdir() into it
* and if it works then it must be a directory. A bit hacky, bit it
* works.
*/
int isdirectory = FALSE;
if(dest[strlen(dest) - 1] == '/')
{
isdirectory = TRUE;
}
if(!isdirectory)
{ /* Use the other testing method */
/*
* Get the current path so that we can chdir back to it if it does
* chdir successfully.
*/
char* current_path = calloc(MAX_STRING, sizeof(char));
require(current_path != NULL, "Memory initialization of current_path in directory_dest failed\n");
getcwd(current_path, MAX_STRING);
require(!match("", current_path), "getcwd() failed\n");
/*
* chdir expects an absolute path.
* If the first character is / then it is already absolute, otherwise
* it is relative and needs to be changed (by appending current_path
* to the dest path).
*/
char* chdir_dest = calloc(MAX_STRING, sizeof(char));
require(chdir_dest != NULL, "Memory initialization of chdir_dest in directory_dest failed\n");
if(dest[0] != '/')
{ /* The path is relative, append current_path */
strcat(chdir_dest, current_path);
strcat(chdir_dest, "/");
strcat(chdir_dest, dest);
}
else
{ /* The path is absolute */
strcpy(chdir_dest, dest);
}
if(0 <= chdir(chdir_dest))
{ /* chdir returned successfully */
/*
* But because of M2-Planet, that doesn't mean anything actually
* happened, check that before we go any further.
*/
char* new_path = calloc(MAX_STRING, sizeof(char));
require(new_path != NULL, "Memory initialization of new_path in directory_dest failed\n");
getcwd(new_path, MAX_STRING);
if(!match(current_path, new_path))
{
isdirectory = TRUE;
chdir(current_path);
}
}
free(chdir_dest);
free(current_path);
}
/*
* If it isn't a directory, and we require one, error out.
* Otherwise, just return what we were given, we're done here.
*/
if(require_directory) require(isdirectory, "Provide a directory destination for multiple source files\n");
if(!isdirectory) return dest;
/* If it is, we need to make dest a full path */
/* 1. Get the basename of source */
char* basename = calloc(MAX_STRING, sizeof(char));
require(basename != NULL, "Memory initialization of basename in directory_dest failed\n");
int last_slash_pos = find_last_char_pos(source, '/');
if(last_slash_pos >= 0)
{ /* Yes, there is a slash in it, copy over everything after that pos */
unsigned spos; /* source pos */
unsigned bpos = 0; /* basename pos */
/* Do the actual copy */
for(spos = last_slash_pos + 1; spos < strlen(source); spos = spos + 1)
{
basename[bpos] = source[spos];
bpos = bpos + 1;
}
}
else
{ /* No, there is no slash in it, hence the basename is just the source */
strcpy(basename, source);
}
/* 2. Ensure our dest (which is a directory) has a trailing slash */
if(dest[strlen(dest) - 1] != '/')
{
strcat(dest, "/");
}
/* 3. Add the basename to the end of the directory */
strcat(dest, basename);
free(basename);
/* Now we have a returnable path! */
return dest;
}
void copy_file(char* source, char* dest)
{
if(verbose)
{ /* Output message */
/* Of the form 'source' -> 'dest' */
fputs("'", stdout);
fputs(source, stdout);
fputs("' -> '", stdout);
fputs(dest, stdout);
fputs("'\n", stdout);
}
/* Open source and dest as FILE*s */
FILE* fsource = fopen(source, "r");
if(fsource == NULL)
{
fputs("Error opening source file ", stderr);
fputs(source, stderr);
fputc('\n', stderr);
exit(EXIT_FAILURE);
}
FILE* fdest = fopen(dest, "w");
if(fdest < 0)
{
fputs("Error opening destination file", stderr);
fputs(dest, stderr);
fputc('\n', stderr);
exit(EXIT_FAILURE);
}
/*
* The following loop reads a character from the source and writes it to the
* dest file. This is all M2-Planet supports.
*/
int c = fgetc(fsource);
while(c != EOF)
{
fputc(c, fdest);
c = fgetc(fsource);
}
/* Cleanup */
fclose(fsource);
fclose(fdest);
}
int main(int argc, char** argv)
{
/* Initialize variables */
char** sources = calloc(MAX_ARRAY, sizeof(char*));
require(sources != NULL, "Memory initialization of sources failed\n");
int sources_index = 0;
char* dest = NULL;
/* Set defaults */
verbose = FALSE;
int i = 1;
int j;
int args_found;
/* Loop arguments */
while(i <= argc)
{
if(NULL == argv[i])
{ /* Ignore and continue */
i = i + 1;
}
else if(match(argv[i], "-h") || match(argv[i], "--help"))
{
fputs("Usage: ", stdout);
fputs(argv[0], stdout);
fputs(" [-h | --help] [-V | --version] [-v | --verbose] source1 source2 sourcen destination\n", stdout);
exit(EXIT_SUCCESS);
}
else if(match(argv[i], "-V") || match(argv[i], "--version"))
{ /* Output version */
fputs("cp version 1.4.0\n", stdout);
exit(EXIT_SUCCESS);
}
else if(match(argv[i], "-v") || match(argv[i], "--verbose"))
{
verbose = TRUE;
i = i + 1;
}
else if(argv[i][0] != '-')
{ /* It is not an option */
/*
* We can tell if this is the source file or the destination file
* through looking *ahead*. If it is the last of this type of argument then
* it must be the destination. (1 destination, many sources).
*/
j = i + 1;
args_found = 0;
while(j < array_length(argv))
{
if(argv[j][0] != '-')
{ /* It's one of these type of arguments */
args_found = args_found + 1;
}
j = j + 1;
}
if(args_found == 0)
{ /* We are setting the destination (there are no more left after this) */
dest = calloc(MAX_STRING, sizeof(char));
require(dest != NULL, "Memory initialization of dest failed\n");
strcpy(dest, argv[i]);
}
else
{ /* We are setting a source */
require(sources_index < MAX_ARRAY, "Too many files\n");
sources[sources_index] = calloc(MAX_STRING, sizeof(char));
require(sources[sources_index] != NULL, "Memory initialization of sources[source_index] failed\n");
strcpy(sources[sources_index], argv[i]);
sources_index = sources_index + 1;
}
i = i + 1;
}
else
{ /* Unknown argument */
fputs("UNKNOWN_ARGUMENT\n", stderr);
exit(EXIT_FAILURE);
}
}
/* Sanitize values */
/* Ensure the two values have values */
/* Another workaround for short-circuit bug */
int error = FALSE;
if(sources[0] == NULL) error = TRUE;
if(error == FALSE) if(match(sources[0], "")) error = TRUE;
require(!error, "Provide a source file\n");
error = FALSE;
if(dest == NULL) error = TRUE;
if(error == FALSE) if(match(dest, "")) error = TRUE;
require(!error, "Provide a destination file\n");
/* Loop through all of the sources, copying each one */
char* this_dest;
for(i = 0; i < array_length(sources); i = i + 1)
{
/* Convert the dest variable to a full path if it's a directory copying to */
/*
* Also, if there is more than one source, we have to be copying to
* a directory destination...
*/
if(array_length(sources) == 1)
{
dest = directory_dest(dest, sources[i], FALSE);
copy_file(sources[i], dest);
}
else
{
this_dest = calloc(MAX_STRING, sizeof(char));
require(this_dest != NULL, "Memory initalization of this_dest failed\n");
this_dest = directory_dest(dest, sources[i], TRUE);
copy_file(sources[i], this_dest);
}
/* Perform the actual copy */
free(sources[i]);
}
free(sources);
free(dest);
return EXIT_SUCCESS;
}
/* Copyright (C) 2020 fosslinux
* This file is part of mescc-tools
*
* mescc-tools is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include "bootstrappable.c"
/* Define all of the constants */
#define MAX_STRING 4096
#define MAX_ARRAY 256
struct files
{
char* name;
struct files* next;
};
/* Globals */
int verbose;
/* PROCESSING FUNCTIONS */
int main(int argc, char** argv)
{
/* Initialize variables */
char* mode = NULL;
struct files* f = NULL;
struct files* n;
int ok;
/* Set defaults */
verbose = FALSE;
int i = 1;
/* Loop arguments */
while(i <= argc)
{
if(NULL == argv[i])
{ /* Ignore and continue */
i = i + 1;
}
else if(match(argv[i], "-h") || match(argv[i], "--help"))
{
fputs("Usage: ", stdout);
fputs(argv[0], stdout);
fputs(" [-h | --help] [-V | --version] [-v | --verbose]\n", stdout);
exit(EXIT_SUCCESS);
}
else if(match(argv[i], "-V") || match(argv[i], "--version"))
{ /* Output version */
fputs("chmod version 1.4.0\n", stdout);
exit(EXIT_SUCCESS);
}
else if(match(argv[i], "-v") || match(argv[i], "--verbose"))
{
verbose = TRUE;
i = i + 1;
}
else
{ /* It must be the file or the mode */
if(mode == NULL)
{ /* Mode always comes first */
mode = calloc(MAX_STRING, sizeof(char));
require(mode != NULL, "Memory initialization of mode failed\n");
/* We need to indicate it is octal */
strcat(mode, "0");
strcat(mode, argv[i]);
}
else
{ /* It's a file, as the mode is already done */
n = calloc(1, sizeof(struct files));
require(n != NULL, "Memory initialization of files failed\n");
n->next = f;
f = n;
f->name = argv[i];
}
i = i + 1;
}
}
/* Ensure the two values have values */
require(mode != NULL, "Provide a mode\n");
require(f != NULL, "Provide a file\n");
/* Convert the mode str into octal */
int omode = strtoint(mode);
/* Loop over files to be operated on */
while(NULL != f)
{
/* Make sure the file can be opened */
ok = access(f->name, 0);
if(ok != 0)
{
fputs("The file: ", stderr);
fputs(f->name, stderr);
fputs(" does not exist\n", stderr);
exit(EXIT_FAILURE);
}
/* Verbose message */
if(verbose)
{
fputs("mode of '", stdout);
fputs(f->name, stdout);
fputs("' changed to ", stdout);
fputs(mode, stdout);
fputs("\n", stdout);
}
/* Perform the chmod */
chmod(f->name, omode);
f = f->next;
}
}
/* Copyright (C) 2021 Jeremiah Orians
* This file is part of mescc-tools-extra
*
* mescc-tools-extra is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools-extra is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools-extra. If not, see <http://www.gnu.org/licenses/>.
*/
/********************************************************************************
* "rm" can be used to delete files. It can also delete *
* parent directories. *
* *
* Usage: rm <dir1>/<file1> <file2> *
* *
* These are all highly standard and portable headers. *
********************************************************************************/
#include <stdio.h>
#include <string.h>
/* This is for unlink() ; this may need to be changed for some platforms. */
#include <unistd.h> /* For unlink() */
#include <stdlib.h>
#include "bootstrappable.c"
void delete_dir(char* name)
{
int r = unlink(name);
if(0 != r)
{
fputs("unable to delete file: ", stderr);
fputs(name, stderr);
fputs(" !!!\n", stderr);
}
}
int main(int argc, char **argv)
{
int i;
for(i = 1; argc > i; i = i + 1)
{
delete_dir(argv[i]);
}
return 0;
}
/* Copyright (C) 2009 Tim Kientzle
* Copyright (C) 2021 Jeremiah Orians
* This file is part of mescc-tools-extra
*
* mescc-tools-extra is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools-extra is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools-extra. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* "untar" is an extremely simple tar extractor:
* * A single C source file, so it should be easy to compile
* and run on any system with a C compiler.
* * Extremely portable standard C. The only non-ANSI function
* used is mkdir().
* * Reads basic ustar tar archives.
* * Does not require libarchive or any other special library.
*
* To compile: cc -o untar untar.c
*
* Usage: untar <archive>
*
* In particular, this program should be sufficient to extract the
* distribution for libarchive, allowing people to bootstrap
* libarchive on systems that do not already have a tar program.
*
* To unpack libarchive-x.y.z.tar.gz:
* * gunzip libarchive-x.y.z.tar.gz
* * untar libarchive-x.y.z.tar
*
* Written by Tim Kientzle, March 2009.
*
* Released into the public domain.
*/
/* These are all highly standard and portable headers. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* This is for mkdir(); this may need to be changed for some platforms. */
#include <sys/stat.h> /* For mkdir() */
#include "bootstrappable.c"
int FUZZING;
int VERBOSE;
int STRICT;
/* Parse an octal number, ignoring leading and trailing nonsense. */
int parseoct(char const* p, size_t n)
{
int i = 0;
int h;
while(((p[0] < '0') || (p[0] > '7')) && (n > 0))
{
p = p + 1;
n = n - 1;
}
while((p[0] >= '0') && (p[0] <= '7') && (n > 0))
{
i = i << 3;
h = p[0];
i = i + h - 48;
p = p + 1;
n = n - 1;
}
return i;
}
/* Returns true if this is 512 zero bytes. */
int is_end_of_archive(char const* p)
{
int n;
for(n = 511; n >= 0; n = n - 1)
{
if(p[n] != 0)
{
return FALSE;
}
}
return TRUE;
}
/* Create a directory, including parent directories as necessary. */
void create_dir(char *pathname, int mode)
{
char *p;
int r;
/* Strip trailing '/' */
if(pathname[strlen(pathname) - 1] == '/')
{
pathname[strlen(pathname) - 1] = '\0';
}
/* Try creating the directory. */
if(!FUZZING)
{
r = mkdir(pathname, mode);
if(r != 0)
{
/* On failure, try creating parent directory. */
p = strrchr(pathname, '/');
if(p != NULL)
{
p[0] = '\0';
create_dir(pathname, 0755);
p[0] = '/';
r = mkdir(pathname, mode);
}
}
if(r != 0)
{
fputs("Could not create directory ", stderr);
fputs(pathname, stderr);
fputc('\n', stderr);
}
}
}
/* Create a file, including parent directory as necessary. */
FILE* create_file(char *pathname)
{
if(FUZZING) return NULL;
FILE* f;
f = fopen(pathname, "w");
if(f == NULL)
{
/* Try creating parent dir and then creating file. */
char *p = strrchr(pathname, '/');
if(p != NULL)
{
p[0] = '\0';
create_dir(pathname, 0755);
p[0] = '/';
f = fopen(pathname, "w");
}
}
return f;
}
/* Verify the tar checksum. */
int verify_checksum(char const* p)
{
int n;
int u = 0;
unsigned h;
for(n = 0; n < 512; n = n + 1)
{
/* Standard tar checksum adds unsigned bytes. */
if((n < 148) || (n > 155))
{
h = p[n];
u = u + h;
}
else
{
u = u + 0x20;
}
}
int r = parseoct(p + 148, 8);
return (u == r);
}
/* Extract a tar archive. */
int untar(FILE *a, char const* path)
{
char* target = calloc(101, sizeof(char));
char* buff = calloc(514, sizeof(char));
FILE* f = NULL;
size_t bytes_read;
size_t bytes_written;
int symlink_ret;
int filesize;
int op;
if(VERBOSE)
{
printf("Extracting from %s\n", path);
}
while(TRUE)
{
memset(buff, 0, 514);
bytes_read = fread(buff, sizeof(char), 512, a);
if(bytes_read < 512)
{
fputs("Short read on ", stderr);
fputs(path, stderr);
fputs(": expected 512, got ", stderr);
fputs(int2str(bytes_read, 10, TRUE), stderr);
fputc('\n', stderr);
return FALSE;
}
if(is_end_of_archive(buff))
{
if(VERBOSE)
{
printf("End of %s\n", path);
}
return TRUE;
}
if(!verify_checksum(buff))
{
fputs("Checksum failure\n", stderr);
return FALSE;
}
filesize = parseoct(buff + 124, 12);
/**
* Long linknames are stored in a special file with the name "././@LongLink"
* and are unsupported by this program.
*/
if (strcmp(buff, "././@LongLink") == 0) {
fputs("unable to create long symlink\n", stderr);
exit(EXIT_FAILURE);
}
op = buff[156];
if('1' == op)
{
if(STRICT)
{
fputs("unable to create hardlinks\n", stderr);
exit(EXIT_FAILURE);
}
printf(" Ignoring hardlink %s", buff);
}
else if('2' == op)
{
memcpy(target, buff + 157, 100);
target[100] = '\0';
if(VERBOSE)
{
printf(" Extracting file %s\n", buff);
}
if(!FUZZING) {
symlink_ret = symlink(target, buff);
if (symlink_ret != 0) {
fputs("Failed to create symlink\n", stderr);
if(STRICT) exit(EXIT_FAILURE);
}
}
}
else if('3' == op)
{
if(STRICT)
{
fputs("unable to create character devices\n", stderr);
exit(EXIT_FAILURE);
}
printf(" Ignoring character device %s\n", buff);
}
else if('4' == op)
{
if(STRICT)
{
fputs("unable to create block devices\n", stderr);
exit(EXIT_FAILURE);
}
printf(" Ignoring block device %s\n", buff);
}
else if('5' == op)
{
if(VERBOSE)
{
printf(" Extracting dir %s\n", buff);
}
create_dir(buff, parseoct(buff + 100, 8));
filesize = 0;
}
else if('6' == op)
{
if(STRICT)
{
fputs("unable to create FIFO\n", stderr);
exit(EXIT_FAILURE);
}
printf(" Ignoring FIFO %s\n", buff);
}
else
{
if(VERBOSE)
{
printf(" Extracting file %s\n", buff);
}
f = create_file(buff);
}
while(filesize > 0)
{
bytes_read = fread(buff, 1, 512, a);
if(bytes_read < 512)
{
fprintf(stderr, "Short read on %s: Expected 512, got %d\n", path, bytes_read);
return FALSE;
}
if(filesize < 512)
{
bytes_read = filesize;
}
if(f != NULL)
{
if(!FUZZING)
{
bytes_written = fwrite(buff, 1, bytes_read, f);
if(bytes_written != bytes_read)
{
fputs("Failed write\n", stderr);
fclose(f);
f = NULL;
}
}
}
filesize = filesize - bytes_read;
}
if(f != NULL)
{
fclose(f);
f = NULL;
}
}
return TRUE;
}
struct files_queue
{
char* name;
FILE* f;
struct files_queue* next;
};
int main(int argc, char **argv)
{
struct files_queue* list = NULL;
struct files_queue* a;
STRICT = TRUE;
FUZZING = FALSE;
int r;
int i = 1;
while (i < argc)
{
if(NULL == argv[i])
{
i = i + 1;
}
else if(match(argv[i], "-f") || match(argv[i], "--file"))
{
a = calloc(1, sizeof(struct files_queue));
require(NULL != a, "failed to allocate enough memory to even get the file name\n");
a->next = list;
a->name = argv[i+1];
require(NULL != a->name, "the --file option requires a filename to be given\n");
a->f = fopen(a->name, "r");
if(a->f == NULL)
{
fputs("Unable to open ", stderr);
fputs(a->name, stderr);
fputc('\n', stderr);
if(STRICT) exit(EXIT_FAILURE);
}
list = a;
i = i + 2;
}
else if(match(argv[i], "--chaos") || match(argv[i], "--fuzz-mode") || match(argv[i], "--fuzzing"))
{
FUZZING = TRUE;
fputs("fuzz-mode enabled, preparing for chaos\n", stderr);
i = i + 1;
}
else if(match(argv[i], "-v") || match(argv[i], "--verbose"))
{
VERBOSE = TRUE;
i = i + 1;
}
else if(match(argv[i], "--non-strict") || match(argv[i], "--bad-decisions-mode") || match(argv[i], "--drunk-mode"))
{
STRICT = FALSE;
fputs("non-strict mode enabled, preparing for chaos\n", stderr);
i = i + 1;
}
else if(match(argv[i], "-h") || match(argv[i], "--help"))
{
fputs("Usage: ", stderr);
fputs(argv[0], stderr);
fputs(" --file $input.gz\n", stderr);
fputs("--verbose to print list of extracted files\n", stderr);
fputs("--help to get this message\n", stderr);
fputs("--fuzz-mode if you wish to fuzz this application safely\n", stderr);
fputs("--non-strict if you wish to just ignore files not existing\n", stderr);
exit(EXIT_SUCCESS);
}
else
{
fputs("Unknown option:", stderr);
fputs(argv[i], stderr);
fputs("\nAborting to avoid problems\n", stderr);
exit(EXIT_FAILURE);
}
}
/* Process the queue one file at a time */
while(NULL != list)
{
r = untar(list->f, list->name);
fputs("The extraction of ", stderr);
fputs(list->name, stderr);
if(r) fputs(" was successful\n", stderr);
else fputs(" produced errors\n", stderr);
fclose(list->f);
list = list->next;
}
return 0;
}
/* Copyright (C) 2002-2013 Mark Adler, all rights reserved
* Copyright (C) 2021 Jeremiah Orians
* This file is part of mescc-tools-extra
*
* mescc-tools-extra is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools-extra is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools-extra. If not, see <http://www.gnu.org/licenses/>.
*/
/* puff.c
* Copyright (C) 2002-2013 Mark Adler, all rights reserved
* version 2.3, 21 Jan 2013
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
* Mark Adler madler@alumni.caltech.edu
*/
/* ungz.c is a gz file decompression utility that leverages puff.c to provide
* the deflate algorithm with multiple modifications to enable being built by
* M2-Planet with M2libc.
*
*
* puff.c is a simple inflate written to be an unambiguous way to specify the
* deflate format. It is not written for speed but rather simplicity. As a
* side benefit, this code might actually be useful when small code is more
* important than speed, such as bootstrap applications. For typical deflate
* data, zlib's inflate() is about four times as fast as puff(). zlib's
* inflate compiles to around 20K on my machine, whereas puff.c compiles to
* around 4K on my machine (a PowerPC using GNU cc). If the faster decode()
* function here is used, then puff() is only twice as slow as zlib's
* inflate().
*
* All dynamically allocated memory comes from the stack. The stack required
* is less than 2K bytes. This code is compatible with 16-bit int's and
* assumes that long's are at least 32 bits. puff.c uses the short data type,
* assumed to be 16 bits, for arrays in order to conserve memory. The code
* works whether integers are stored big endian or little endian.
*
* In the comments below are "Format notes" that describe the inflate process
* and document some of the less obvious aspects of the format. This source
* code is meant to supplement RFC 1951, which formally describes the deflate
* format:
*
* http://www.zlib.org/rfc-deflate.html
*/
/*
* Change history:
*
* 1.0 10 Feb 2002 - First version
* 1.1 17 Feb 2002 - Clarifications of some comments and notes
* - Update puff() dest and source pointers on negative
* errors to facilitate debugging deflators
* - Remove longest from struct huffman -- not needed
* - Simplify offs[] index in construct()
* - Add input size and checking, using longjmp() to
* maintain easy readability
* - Use short data type for large arrays
* - Use pointers instead of long to specify source and
* destination sizes to avoid arbitrary 4 GB limits
* 1.2 17 Mar 2002 - Add faster version of decode(), doubles speed (!),
* but leave simple version for readabilty
* - Make sure invalid distances detected if pointers
* are 16 bits
* - Fix fixed codes table error
* - Provide a scanning mode for determining size of
* uncompressed data
* 1.3 20 Mar 2002 - Go back to lengths for puff() parameters [Gailly]
* - Add a puff.h file for the interface
* - Add braces in puff() for else do [Gailly]
* - Use indexes instead of pointers for readability
* 1.4 31 Mar 2002 - Simplify construct() code set check
* - Fix some comments
* - Add FIXLCODES #define
* 1.5 6 Apr 2002 - Minor comment fixes
* 1.6 7 Aug 2002 - Minor format changes
* 1.7 3 Mar 2003 - Added test code for distribution
* - Added zlib-like license
* 1.8 9 Jan 2004 - Added some comments on no distance codes case
* 1.9 21 Feb 2008 - Fix bug on 16-bit integer architectures [Pohland]
* - Catch missing end-of-block symbol error
* 2.0 25 Jul 2008 - Add #define to permit distance too far back
* - Add option in TEST code for puff to write the data
* - Add option in TEST code to skip input bytes
* - Allow TEST code to read from piped stdin
* 2.1 4 Apr 2010 - Avoid variable initialization for happier compilers
* - Avoid unsigned comparisons for even happier compilers
* 2.2 25 Apr 2010 - Fix bug in variable initializations [Oberhumer]
* - Add const where appropriate [Oberhumer]
* - Split if's and ?'s for coverage testing
* - Break out test code to separate file
* - Move NIL to puff.h
* - Allow incomplete code only if single code length is 1
* - Add full code coverage test to Makefile
* 2.3 21 Jan 2013 - Check for invalid code length codes in dynamic blocks
* ?? 22 May 2021 - Convert to M2-Planet C subset for bootstrapping purposes.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bootstrappable.c"
/*
* Maximums for allocations and loops. It is not useful to change these --
* they are fixed by the deflate format.
*/
#define MAXBITS 15 /* maximum bits in a code */
#define MAXLCODES 286 /* maximum number of literal/length codes */
#define MAXDCODES 30 /* maximum number of distance codes */
#define MAXCODES 316 /* maximum codes lengths to read (MAXLCODES+MAXDCODES) */
#define FIXLCODES 288 /* number of fixed literal/length codes */
/* input and output state */
struct state {
/* output state */
char *out; /* output buffer */
size_t outlen; /* available space at out */
size_t outcnt; /* bytes written to out so far */
/* input state */
char *in; /* input buffer */
size_t inlen; /* available input at in */
size_t incnt; /* bytes read so far */
int bitbuf; /* bit buffer */
int bitcnt; /* number of bits in bit buffer */
};
/*
* Return need bits from the input stream. This always leaves less than
* eight bits in the buffer. bits() works properly for need == 0.
*
* Format notes:
*
* - Bits are stored in bytes from the least significant bit to the most
* significant bit. Therefore bits are dropped from the bottom of the bit
* buffer, using shift right, and new bytes are appended to the top of the
* bit buffer, using shift left.
*/
int bits(struct state *s, int need)
{
long val; /* bit accumulator (can use up to 20 bits) */
long hold;
/* load at least need bits into val */
val = s->bitbuf;
while (s->bitcnt < need)
{
if (s->incnt == s->inlen)
{
fputs("out of input\n", stderr);
exit(EXIT_FAILURE);
}
hold = (s->in[s->incnt] & 0xFF);
s->incnt = s->incnt + 1;
val = val | (hold << s->bitcnt); /* load eight bits */
s->bitcnt = s->bitcnt + 8;
}
/* drop need bits and update buffer, always zero to seven bits left */
s->bitbuf = (val >> need);
s->bitcnt = s->bitcnt - need;
/* return need bits, zeroing the bits above that */
val = (val & ((1 << need) - 1));
#if defined(DEBUG)
fputs(int2str(val, 16, FALSE), stderr);
fputs(" : bits\n", stderr);
#endif
return val;
}
/*
* Process a stored block.
*
* Format notes:
*
* - After the two-bit stored block type (00), the stored block length and
* stored bytes are byte-aligned for fast copying. Therefore any leftover
* bits in the byte that has the last bit of the type, as many as seven, are
* discarded. The value of the discarded bits are not defined and should not
* be checked against any expectation.
*
* - The second inverted copy of the stored block length does not have to be
* checked, but it's probably a good idea to do so anyway.
*
* - A stored block can have zero length. This is sometimes used to byte-align
* subsets of the compressed data for random access or partial recovery.
*/
int stored(struct state *s)
{
unsigned len; /* length of stored block */
/* discard leftover bits from current byte (assumes s->bitcnt < 8) */
s->bitbuf = 0;
s->bitcnt = 0;
/* get length and check against its one's complement */
if ((s->incnt + 4) > s->inlen) return 2; /* not enough input */
len = s->in[s->incnt];
s->incnt = s->incnt + 1;
len = len | (s->in[s->incnt] << 8);
s->incnt = s->incnt + 1;
if(s->in[s->incnt] != (~len & 0xff)) return -2; /* didn't match complement! */
s->incnt = s->incnt + 1;
if(s->in[s->incnt] != ((~len >> 8) & 0xff)) return -2; /* didn't match complement! */
s->incnt = s->incnt + 1;
/* copy len bytes from in to out */
if ((s->incnt + len) > s->inlen) return 2; /* not enough input */
if (s->out != 0)
{
if ((s->outcnt + len) > s->outlen) return 1; /* not enough output space */
while (0 != len)
{
len = len - 1;
s->out[s->outcnt] = s->in[s->incnt];
s->outcnt = s->outcnt + 1;
s->incnt = s->incnt + 1;
}
}
else
{ /* just scanning */
s->outcnt = s->outcnt + len;
s->incnt = s->incnt + len;
}
/* done with a valid stored block */
return 0;
}
/*
* Huffman code decoding tables. count[1..MAXBITS] is the number of symbols of
* each length, which for a canonical code are stepped through in order.
* symbol[] are the symbol values in canonical order, where the number of
* entries is the sum of the counts in count[]. The decoding process can be
* seen in the function decode() below.
*/
struct huffman
{
int *count; /* number of symbols of each length */
int *symbol; /* canonically ordered symbols */
};
/*
* Decode a code from the stream s using huffman table h. Return the symbol or
* a negative value if there is an error. If all of the lengths are zero, i.e.
* an empty code, or if the code is incomplete and an invalid code is received,
* then -10 is returned after reading MAXBITS bits.
*
* Format notes:
*
* - The codes as stored in the compressed data are bit-reversed relative to
* a simple integer ordering of codes of the same lengths. Hence below the
* bits are pulled from the compressed data one at a time and used to
* build the code value reversed from what is in the stream in order to
* permit simple integer comparisons for decoding. A table-based decoding
* scheme (as used in zlib) does not need to do this reversal.
*
* - The first code for the shortest length is all zeros. Subsequent codes of
* the same length are simply integer increments of the previous code. When
* moving up a length, a zero bit is appended to the code. For a complete
* code, the last code of the longest length will be all ones.
*
* - Incomplete codes are handled by this decoder, since they are permitted
* in the deflate format. See the format notes for fixed() and dynamic().
*/
int decode(struct state *s, struct huffman *h)
{
int len; /* current number of bits in code */
int code = 0; /* len bits being decoded */
int first = 0; /* first code of length len */
int count; /* number of codes of length len */
int index = 0; /* index of first code of length len in symbol table */
long hold;
for (len = 1; len <= MAXBITS; len = len + 1)
{
hold = bits(s, 1); /* get next bit */
code = code | hold;
count = h->count[len];
if ((code - count) < first)
{
hold = index + (code - first);
return h->symbol[hold]; /* if length len, return symbol */
}
index = index + count; /* else update for next length */
first = first + count;
first = first << 1;
code = code << 1;
}
return -10; /* ran out of codes */
}
/*
* Given the list of code lengths length[0..n-1] representing a canonical
* Huffman code for n symbols, construct the tables required to decode those
* codes. Those tables are the number of codes of each length, and the symbols
* sorted by length, retaining their original order within each length. The
* return value is zero for a complete code set, negative for an over-
* subscribed code set, and positive for an incomplete code set. The tables
* can be used if the return value is zero or positive, but they cannot be used
* if the return value is negative. If the return value is zero, it is not
* possible for decode() using that table to return an error--any stream of
* enough bits will resolve to a symbol. If the return value is positive, then
* it is possible for decode() using that table to return an error for received
* codes past the end of the incomplete lengths.
*
* Not used by decode(), but used for error checking, h->count[0] is the number
* of the n symbols not in the code. So n - h->count[0] is the number of
* codes. This is useful for checking for incomplete codes that have more than
* one symbol, which is an error in a dynamic block.
*
* Assumption: for all i in 0..n-1, 0 <= length[i] <= MAXBITS
* This is assured by the construction of the length arrays in dynamic() and
* fixed() and is not verified by construct().
*
* Format notes:
*
* - Permitted and expected examples of incomplete codes are one of the fixed
* codes and any code with a single symbol which in deflate is coded as one
* bit instead of zero bits. See the format notes for fixed() and dynamic().
*
* - Within a given code length, the symbols are kept in ascending order for
* the code bits definition.
*/
int construct(struct huffman *h, int *length, int n)
{
int symbol; /* current symbol when stepping through length[] */
int len; /* current length when stepping through h->count[] */
int left; /* number of possible codes left of current length */
int* offs; /* offsets in symbol table for each length */
offs = calloc(MAXBITS+1, sizeof(int));
long hold;
#if defined(DEBUG)
int i;
fputs(int2str(n, 16, FALSE), stderr);
fputs(" : construct 0\n", stderr);
for(i = 0; i < n; i = i + 1)
{
fputs(int2str(length[i], 16, FALSE), stderr);
fputs(" : construct 2\n", stderr);
}
#endif
/* count number of codes of each length */
for (len = 0; len <= MAXBITS; len = len + 1)
{
h->count[len] = 0;
}
for (symbol = 0; symbol < n; symbol = symbol + 1)
{
hold = length[symbol];
h->count[hold] = h->count[hold] + 1; /* assumes lengths are within bounds */
}
if (h->count[0] == n) return 0; /* no codes! complete, but decode() will fail */
/* check for an over-subscribed or incomplete set of lengths */
left = 1; /* one possible code of zero length */
for (len = 1; len <= MAXBITS; len = len + 1)
{
left = left << 1; /* one more bit, double codes left */
left = left - h->count[len]; /* deduct count from possible codes */
if (left < 0) return left; /* over-subscribed--return negative */
} /* left > 0 means incomplete */
/* generate offsets into symbol table for each length for sorting */
offs[1] = 0;
for (len = 1; len < MAXBITS; len = len + 1)
{
offs[len + 1] = offs[len] + h->count[len];
}
/*
* put symbols in table sorted by length, by symbol order within each
* length
*/
for (symbol = 0; symbol < n; symbol = symbol + 1)
{
if (length[symbol] != 0)
{
hold = length[symbol];
hold = offs[hold];
h->symbol[hold] = symbol;
hold = length[symbol];
offs[hold] = offs[hold] + 1;
}
}
/* return zero for complete set, positive for incomplete set */
return left;
}
/*
* Decode literal/length and distance codes until an end-of-block code.
*
* Format notes:
*
* - Compressed data that is after the block type if fixed or after the code
* description if dynamic is a combination of literals and length/distance
* pairs terminated by and end-of-block code. Literals are simply Huffman
* coded bytes. A length/distance pair is a coded length followed by a
* coded distance to represent a string that occurs earlier in the
* uncompressed data that occurs again at the current location.
*
* - Literals, lengths, and the end-of-block code are combined into a single
* code of up to 286 symbols. They are 256 literals (0..255), 29 length
* symbols (257..285), and the end-of-block symbol (256).
*
* - There are 256 possible lengths (3..258), and so 29 symbols are not enough
* to represent all of those. Lengths 3..10 and 258 are in fact represented
* by just a length symbol. Lengths 11..257 are represented as a symbol and
* some number of extra bits that are added as an integer to the base length
* of the length symbol. The number of extra bits is determined by the base
* length symbol. These are in the static arrays below, lens[] for the base
* lengths and lext[] for the corresponding number of extra bits.
*
* - The reason that 258 gets its own symbol is that the longest length is used
* often in highly redundant files. Note that 258 can also be coded as the
* base value 227 plus the maximum extra value of 31. While a good deflate
* should never do this, it is not an error, and should be decoded properly.
*
* - If a length is decoded, including its extra bits if any, then it is
* followed a distance code. There are up to 30 distance symbols. Again
* there are many more possible distances (1..32768), so extra bits are added
* to a base value represented by the symbol. The distances 1..4 get their
* own symbol, but the rest require extra bits. The base distances and
* corresponding number of extra bits are below in the static arrays dist[]
* and dext[].
*
* - Literal bytes are simply written to the output. A length/distance pair is
* an instruction to copy previously uncompressed bytes to the output. The
* copy is from distance bytes back in the output stream, copying for length
* bytes.
*
* - Distances pointing before the beginning of the output data are not
* permitted.
*
* - Overlapped copies, where the length is greater than the distance, are
* allowed and common. For example, a distance of one and a length of 258
* simply copies the last byte 258 times. A distance of four and a length of
* twelve copies the last four bytes three times. A simple forward copy
* ignoring whether the length is greater than the distance or not implements
* this correctly. You should not use memcpy() since its behavior is not
* defined for overlapped arrays. You should not use memmove() or bcopy()
* since though their behavior -is- defined for overlapping arrays, it is
* defined to do the wrong thing in this case.
*/
int* codes_lens(void)
{
/* Size base for length codes 257..285 */
int* r = calloc(30, sizeof(int));
r[0] = 3;
r[1] = 4;
r[2] = 5;
r[3] = 6;
r[4] = 7;
r[5] = 8;
r[6] = 9;
r[7] = 10;
r[8] = 11;
r[9] = 13;
r[10] = 15;
r[11] = 17;
r[12] = 19;
r[13] = 23;
r[14] = 27;
r[15] = 31;
r[16] = 35;
r[17] = 43;
r[18] = 51;
r[19] = 59;
r[20] = 67;
r[21] = 83;
r[22] = 99;
r[23] = 115;
r[24] = 131;
r[25] = 163;
r[26] = 195;
r[27] = 227;
r[28] = 258;
return r;
}
int* codes_lext(void)
{
/* Extra bits for length codes 257..285 */
int* r = calloc(30, sizeof(int));
r[0] = 0;
r[1] = 0;
r[2] = 0;
r[3] = 0;
r[4] = 0;
r[5] = 0;
r[6] = 0;
r[7] = 0;
r[8] = 1;
r[9] = 1;
r[10] = 1;
r[11] = 1;
r[12] = 2;
r[13] = 2;
r[14] = 2;
r[15] = 2;
r[16] = 3;
r[17] = 3;
r[18] = 3;
r[19] = 3;
r[20] = 4;
r[21] = 4;
r[22] = 4;
r[23] = 4;
r[24] = 5;
r[25] = 5;
r[26] = 5;
r[27] = 5;
r[28] = 0;
return r;
}
int* codes_dists(void)
{
/* Offset base for distance codes 0..29 */
int* r = calloc(31, sizeof(int));
r[0] = 1;
r[1] = 2;
r[2] = 3;
r[3] = 4;
r[4] = 5;
r[5] = 7;
r[6] = 9;
r[7] = 13;
r[8] = 17;
r[9] = 25;
r[10] = 33;
r[11] = 49;
r[12] = 65;
r[13] = 97;
r[14] = 129;
r[15] = 193;
r[16] = 257;
r[17] = 385;
r[18] = 513;
r[19] = 769;
r[20] = 1025;
r[21] = 1537;
r[22] = 2049;
r[23] = 3073;
r[24] = 4097;
r[25] = 6145;
r[26] = 8193;
r[27] = 12289;
r[28] = 16385;
r[29] = 24577;
return r;
}
int* codes_dext(void)
{
/* Extra bits for distance codes 0..29 */
int* r = calloc(31, sizeof(int));
r[0] = 0;
r[1] = 0;
r[2] = 0;
r[3] = 0;
r[4] = 1;
r[5] = 1;
r[6] = 2;
r[7] = 2;
r[8] = 3;
r[9] = 3;
r[10] = 4;
r[11] = 4;
r[12] = 5;
r[13] = 5;
r[14] = 6;
r[15] = 6;
r[16] = 7;
r[17] = 7;
r[18] = 8;
r[19] = 8;
r[20] = 9;
r[21] = 9;
r[22] = 10;
r[23] = 10;
r[24] = 11;
r[25] = 11;
r[26] = 12;
r[27] = 12;
r[28] = 13;
r[29] = 13;
return r;
}
int codes(struct state *s, struct huffman *lencode, struct huffman *distcode)
{
int symbol; /* decoded symbol */
int len; /* length for copy */
unsigned dist; /* distance for copy */
int* lens = codes_lens();
int* lext = codes_lext();
int* dists = codes_dists();
int* dext = codes_dext();
/* decode literals and length/distance pairs */
do
{
symbol = decode(s, lencode);
if (symbol < 0) return symbol; /* invalid symbol */
if (symbol < 256) /* literal: symbol is the byte */
{
/* write out the literal */
if (s->out != 0)
{
if (s->outcnt == s->outlen) return 1;
s->out[s->outcnt] = symbol;
}
s->outcnt = s->outcnt + 1;
}
else if (symbol > 256) /* length */
{
/* get and compute length */
symbol = symbol - 257;
if (symbol >= 29) return -10; /* invalid fixed code */
len = lens[symbol] + bits(s, lext[symbol]);
/* get and check distance */
symbol = decode(s, distcode);
if (symbol < 0) return symbol; /* invalid symbol */
dist = dists[symbol] + bits(s, dext[symbol]);
if (dist > s->outcnt) return -11; /* distance too far back */
/* copy length bytes from distance bytes back */
if (s->out != 0)
{
if (s->outcnt + len > s->outlen) return 1;
while (0 != len)
{
len = len - 1;
if(dist > s->outcnt) s->out[s->outcnt] = 0;
else s->out[s->outcnt] = s->out[s->outcnt - dist];
s->outcnt = s->outcnt + 1;
}
}
else s->outcnt = s->outcnt + len;
}
} while (symbol != 256); /* end of block symbol */
/* done with a valid fixed or dynamic block */
return 0;
}
/*
* Process a fixed codes block.
*
* Format notes:
*
* - This block type can be useful for compressing small amounts of data for
* which the size of the code descriptions in a dynamic block exceeds the
* benefit of custom codes for that block. For fixed codes, no bits are
* spent on code descriptions. Instead the code lengths for literal/length
* codes and distance codes are fixed. The specific lengths for each symbol
* can be seen in the "for" loops below.
*
* - The literal/length code is complete, but has two symbols that are invalid
* and should result in an error if received. This cannot be implemented
* simply as an incomplete code since those two symbols are in the "middle"
* of the code. They are eight bits long and the longest literal/length\
* code is nine bits. Therefore the code must be constructed with those
* symbols, and the invalid symbols must be detected after decoding.
*
* - The fixed distance codes also have two invalid symbols that should result
* in an error if received. Since all of the distance codes are the same
* length, this can be implemented as an incomplete code. Then the invalid
* codes are detected while decoding.
*/
int fixed(struct state *s)
{
int* lencnt = calloc((MAXBITS + 1), sizeof(int));
int* lensym = calloc(FIXLCODES, sizeof(int));
int* distcnt = calloc((MAXBITS + 1), sizeof(int));
int* distsym = calloc(MAXDCODES, sizeof(int));
struct huffman* lencode = calloc(1, sizeof(struct huffman));
struct huffman* distcode = calloc(1, sizeof(struct huffman));
int hold;
/* build fixed huffman tables if first call (may not be thread safe) */
int symbol;
int* lengths = calloc(FIXLCODES, sizeof(int));
/* construct lencode and distcode */
lencode->count = lencnt;
lencode->symbol = lensym;
distcode->count = distcnt;
distcode->symbol = distsym;
/* literal/length table */
for (symbol = 0; symbol < 144; symbol = symbol + 1)
{
lengths[symbol] = 8;
}
while(symbol < 256)
{
lengths[symbol] = 9;
symbol = symbol + 1;
}
while(symbol < 280)
{
lengths[symbol] = 7;
symbol = symbol + 1;
}
while(symbol < FIXLCODES)
{
lengths[symbol] = 8;
symbol = symbol + 1;
}
construct(lencode, lengths, FIXLCODES);
/* distance table */
for (symbol = 0; symbol < MAXDCODES; symbol = symbol + 1)
{
lengths[symbol] = 5;
}
construct(distcode, lengths, MAXDCODES);
/* decode data until end-of-block code */
hold = codes(s, lencode, distcode);
return hold;
}
/*
* Process a dynamic codes block.
*
* Format notes:
*
* - A dynamic block starts with a description of the literal/length and
* distance codes for that block. New dynamic blocks allow the compressor to
* rapidly adapt to changing data with new codes optimized for that data.
*
* - The codes used by the deflate format are "canonical", which means that
* the actual bits of the codes are generated in an unambiguous way simply
* from the number of bits in each code. Therefore the code descriptions
* are simply a list of code lengths for each symbol.
*
* - The code lengths are stored in order for the symbols, so lengths are
* provided for each of the literal/length symbols, and for each of the
* distance symbols.
*
* - If a symbol is not used in the block, this is represented by a zero as
* as the code length. This does not mean a zero-length code, but rather
* that no code should be created for this symbol. There is no way in the
* deflate format to represent a zero-length code.
*
* - The maximum number of bits in a code is 15, so the possible lengths for
* any code are 1..15.
*
* - The fact that a length of zero is not permitted for a code has an
* interesting consequence. Normally if only one symbol is used for a given
* code, then in fact that code could be represented with zero bits. However
* in deflate, that code has to be at least one bit. So for example, if
* only a single distance base symbol appears in a block, then it will be
* represented by a single code of length one, in particular one 0 bit. This
* is an incomplete code, since if a 1 bit is received, it has no meaning,
* and should result in an error. So incomplete distance codes of one symbol
* should be permitted, and the receipt of invalid codes should be handled.
*
* - It is also possible to have a single literal/length code, but that code
* must be the end-of-block code, since every dynamic block has one. This
* is not the most efficient way to create an empty block (an empty fixed
* block is fewer bits), but it is allowed by the format. So incomplete
* literal/length codes of one symbol should also be permitted.
*
* - If there are only literal codes and no lengths, then there are no distance
* codes. This is represented by one distance code with zero bits.
*
* - The list of up to 286 length/literal lengths and up to 30 distance lengths
* are themselves compressed using Huffman codes and run-length encoding. In
* the list of code lengths, a 0 symbol means no code, a 1..15 symbol means
* that length, and the symbols 16, 17, and 18 are run-length instructions.
* Each of 16, 17, and 18 are follwed by extra bits to define the length of
* the run. 16 copies the last length 3 to 6 times. 17 represents 3 to 10
* zero lengths, and 18 represents 11 to 138 zero lengths. Unused symbols
* are common, hence the special coding for zero lengths.
*
* - The symbols for 0..18 are Huffman coded, and so that code must be
* described first. This is simply a sequence of up to 19 three-bit values
* representing no code (0) or the code length for that symbol (1..7).
*
* - A dynamic block starts with three fixed-size counts from which is computed
* the number of literal/length code lengths, the number of distance code
* lengths, and the number of code length code lengths (ok, you come up with
* a better name!) in the code descriptions. For the literal/length and
* distance codes, lengths after those provided are considered zero, i.e. no
* code. The code length code lengths are received in a permuted order (see
* the order[] array below) to make a short code length code length list more
* likely. As it turns out, very short and very long codes are less likely
* to be seen in a dynamic code description, hence what may appear initially
* to be a peculiar ordering.
*
* - Given the number of literal/length code lengths (nlen) and distance code
* lengths (ndist), then they are treated as one long list of nlen + ndist
* code lengths. Therefore run-length coding can and often does cross the
* boundary between the two sets of lengths.
*
* - So to summarize, the code description at the start of a dynamic block is
* three counts for the number of code lengths for the literal/length codes,
* the distance codes, and the code length codes. This is followed by the
* code length code lengths, three bits each. This is used to construct the
* code length code which is used to read the remainder of the lengths. Then
* the literal/length code lengths and distance lengths are read as a single
* set of lengths using the code length codes. Codes are constructed from
* the resulting two sets of lengths, and then finally you can start
* decoding actual compressed data in the block.
*
* - For reference, a "typical" size for the code description in a dynamic
* block is around 80 bytes.
*/
int* dynamic_order(void)
{
/* permutation of code length codes */
int* r = calloc(20, sizeof(int));
r[0] = 16;
r[1] = 17;
r[2] = 18;
r[3] = 0;
r[4] = 8;
r[5] = 7;
r[6] = 9;
r[7] = 6;
r[8] = 10;
r[9] = 5;
r[10] = 11;
r[11] = 4;
r[12] = 12;
r[13] = 3;
r[14] = 13;
r[15] = 2;
r[16] = 14;
r[17] = 1;
r[18] = 15;
return r;
}
int dynamic(struct state *s)
{
int nlen;
int ndist;
int ncode; /* number of lengths in descriptor */
int index; /* index of lengths[] */
int err; /* construct() return value */
int* lengths = calloc(MAXCODES, sizeof(int)); /* descriptor code lengths */
int* lencnt = calloc((MAXBITS + 1), sizeof(int));
int* lensym = calloc(MAXLCODES, sizeof(int)); /* lencode memory */
int* distcnt = calloc((MAXBITS + 1), sizeof(int));
int* distsym = calloc(MAXDCODES, sizeof(int)); /* distcode memory */
struct huffman* lencode = calloc(1, sizeof(struct huffman));
struct huffman* distcode = calloc(1, sizeof(struct huffman));
int* order = dynamic_order();
long hold;
int* set;
/* construct lencode and distcode */
lencode->count = lencnt;
lencode->symbol = lensym;
distcode->count = distcnt;
distcode->symbol = distsym;
/* get number of lengths in each table, check lengths */
nlen = bits(s, 5) + 257;
ndist = bits(s, 5) + 1;
ncode = bits(s, 4) + 4;
if (nlen > MAXLCODES) return -3; /* bad counts */
if(ndist > MAXDCODES) return -3; /* bad counts */
/* read code length code lengths (really), missing lengths are zero */
for (index = 0; index < ncode; index = index + 1)
{
hold = order[index];
lengths[hold] = bits(s, 3);
}
while(index < 19)
{
hold = order[index];
lengths[hold] = 0;
index = index + 1;
}
/* build huffman table for code lengths codes (use lencode temporarily) */
err = construct(lencode, lengths, 19);
if (err != 0) return -4; /* require complete code set here */
/* read length/literal and distance code length tables */
index = 0;
int symbol; /* decoded value */
int len; /* last length to repeat */
while (index < (nlen + ndist))
{
symbol = decode(s, lencode);
if (symbol < 0) return symbol; /* invalid symbol */
if (symbol < 16) /* length in 0..15 */
{
lengths[index] = symbol;
index = index + 1;
}
else /* repeat instruction */
{
len = 0; /* assume repeating zeros */
if (symbol == 16) /* repeat last length 3..6 times */
{
if (index == 0) return -5; /* no last length! */
len = lengths[index - 1]; /* last length */
symbol = 3 + bits(s, 2);
}
else if (symbol == 17) symbol = 3 + bits(s, 3); /* repeat zero 3..10 times */
else symbol = 11 + bits(s, 7); /* == 18, repeat zero 11..138 times */
if ((index + symbol) > (nlen + ndist)) return -6; /* too many lengths! */
while(0 != symbol) /* repeat last or zero symbol times */
{
lengths[index] = len;
index = index + 1;
symbol = symbol - 1;
}
}
}
/* check for end-of-block code -- there better be one! */
if (lengths[256] == 0) return -9;
/* build huffman table for literal/length codes */
err = construct(lencode, lengths, nlen);
/* incomplete code ok only for single length 1 code */
if (err < 0) return -7;
if((0 != err) && (nlen != (lencode->count[0] + lencode->count[1]))) return -7;
/* build huffman table for distance codes */
set = lengths;
set += nlen;
err = construct(distcode, set, ndist);
/* incomplete code ok only for single length 1 code */
if (err < 0) return -8;
if((0 != err) && (ndist != (distcode->count[0] + distcode->count[1]))) return -8;
/* decode data until end-of-block code */
hold = codes(s, lencode, distcode);
return hold;
}
/*
* Inflate source to dest. On return, destlen and sourcelen are updated to the
* size of the uncompressed data and the size of the deflate data respectively.
* On success, the return value of puff() is zero. If there is an error in the
* source data, i.e. it is not in the deflate format, then a negative value is
* returned. If there is not enough input available or there is not enough
* output space, then a positive error is returned. In that case, destlen and
* sourcelen are not updated to facilitate retrying from the beginning with the
* provision of more input data or more output space. In the case of invalid
* inflate data (a negative error), the dest and source pointers are updated to
* facilitate the debugging of deflators.
*
* puff() also has a mode to determine the size of the uncompressed output with
* no output written. For this dest must be (unsigned char *)0. In this case,
* the input value of *destlen is ignored, and on return *destlen is set to the
* size of the uncompressed output.
*
* The return codes are:
*
* 2: available inflate data did not terminate
* 1: output space exhausted before completing inflate
* 0: successful inflate
* -1: invalid block type (type == 3)
* -2: stored block length did not match one's complement
* -3: dynamic block code description: too many length or distance codes
* -4: dynamic block code description: code lengths codes incomplete
* -5: dynamic block code description: repeat lengths with no first length
* -6: dynamic block code description: repeat more than specified lengths
* -7: dynamic block code description: invalid literal/length code lengths
* -8: dynamic block code description: invalid distance code lengths
* -9: dynamic block code description: missing end-of-block code
* -10: invalid literal/length or distance code in fixed or dynamic block
* -11: distance is too far back in fixed or dynamic block
*
* Format notes:
*
* - Three bits are read for each block to determine the kind of block and
* whether or not it is the last block. Then the block is decoded and the
* process repeated if it was not the last block.
*
* - The leftover bits in the last byte of the deflate data after the last
* block (if it was a fixed or dynamic block) are undefined and have no
* expected values to check.
*/
struct puffer
{
int error;
size_t destlen;
size_t sourcelen;
};
struct puffer* puff(char* dest, size_t destlen, char* source, size_t sourcelen)
{
struct state* s = calloc(1, sizeof(struct state)); /* input/output state */
int last;
int type; /* block information */
int err; /* return value */
/* initialize output state */
s->out = dest;
s->outlen = destlen; /* ignored if dest is NIL */
s->outcnt = 0;
/* initialize input state */
s->in = source;
s->inlen = sourcelen;
s->incnt = 0;
s->bitbuf = 0;
s->bitcnt = 0;
/* process blocks until last block or error */
do
{
last = bits(s, 1); /* one if last block */
type = bits(s, 2); /* block type 0..3 */
if(0 == type)
{
err = stored(s);
}
else if(1 == type)
{
err = fixed(s);
}
else if(2 == type)
{
err = dynamic(s);
}
else err = -1;
if (err != 0) break; /* return with error */
} while (!last);
/* update the lengths and return */
struct puffer* r = calloc(1, sizeof(struct puffer));
r->error = err;
r->destlen = s->outcnt;
r->sourcelen = s->incnt;
return r;
}
void write_blob(char* s, int start, int len, FILE* f)
{
char* table = "0123456789ABCDEF";
if(start > len) return;
int i = s[start] & 0xFF;
fputc(table[(i >> 4)], f);
fputc(table[(i & 0xF)], f);
fputc(' ', f);
if(start == len) fputc('\n', f);
else fputc(' ', f);
write_blob(s, start + 1, len, f);
}
#define FTEXT 0x01
#define FHCRC 0x02
#define FEXTRA 0x04
#define FNAME 0x08
#define FCOMMENT 0x10
struct gz
{
char* HEADER;
int ID;
int CM;
int FLG;
int MTIME;
int XFL;
int OS;
int XLEN;
char* FLG_FEXTRA;
char* FLG_FNAME;
char* FLG_FCOMMENT;
int CRC16;
char* FLG_FHCRC;
char* block;
int CRC32;
size_t ISIZE;
size_t file_size;
};
/* Read the input file *name, or stdin if name is NULL, into allocated memory.
Reallocate to larger buffers until the entire file is read in. Return a
pointer to the allocated data, or NULL if there was a memory allocation
failure. *len is the number of bytes of data read from the input file (even
if load() returns NULL). If the input file was empty or could not be opened
or read, *len is zero. */
struct gz* load(char* name)
{
struct gz* r = calloc(1, sizeof(struct gz));
char* scratch = calloc(5, sizeof(char));
FILE* f = fopen(name, "r");
int count;
int ID1;
int ID2;
int count1;
int count2;
int count3;
int count4;
int c;
int i;
char* s = calloc(11, sizeof(char));
if(NULL == f)
{
fputs("unable to open file: ", stderr);
fputs(name, stderr);
fputs("\nfor reading\n", stderr);
return NULL;
}
fseek(f, 0, SEEK_END);
r->file_size = ftell(f);
fseek(f, 0, SEEK_SET);
count = fread(s, sizeof(char), 10, f);
if(10 != count)
{
fputs("incomplete gzip header\n", stderr);
return NULL;
}
/* Verify header */
r->HEADER = s;
#if defined(DEBUG)
write_blob(s, 0, 10, stderr);
#endif
ID1 = (s[0] & 0xFF);
ID2 = (s[1] & 0xFF);
r->ID = ((ID1 << 8) | ID2);
if(0x1f8b != r->ID)
{
fputs("bad header\n", stderr);
return NULL;
}
/* Verify Compression */
r->CM = (r->HEADER[2] & 0xFF);
if(8 != r->CM)
{
fputs("NOT DEFLATE COMPRESSION\n", stderr);
return NULL;
}
/* Get specials specified in flag bits */
r->FLG = (r->HEADER[3] & 0xFF);
if(0 != (FEXTRA & r->FLG))
{
count = fread(scratch, sizeof(char), 4, f);
count1 = (scratch[0] & 0xFF);
count2 = (scratch[1] & 0xFF);
count3 = (scratch[2] & 0xFF);
count4 = (scratch[3] & 0xFF);
count = (count1 << 24) | (count2 << 16) | (count3 << 8) | count4;
require(0 < count, "FEXTRA field needs to be a positive number of bytes in size\n");
require(100000000 > count, "we don't support FEXTRA fields greater than 100MB in size\n");
r->FLG_FEXTRA = calloc(count + 1, sizeof(char));
fread(r->FLG_FEXTRA, sizeof(char), count, f);
}
if(0 != (FNAME & r->FLG))
{
r->FLG_FNAME = calloc(r->file_size, sizeof(char));
i = 0;
do
{
c = fgetc(f);
require(0 <= c, "received a non-null terminated filename in the file\n");
r->FLG_FNAME[i] = c;
i = i + 1;
} while(0 != c);
}
if(0 != (FCOMMENT & r->FLG))
{
r->FLG_FCOMMENT = calloc(r->file_size, sizeof(char));
i = 0;
do
{
c = fgetc(f);
require(0 <= c, "received a non-null terminated comment in the file\n");
r->FLG_FCOMMENT[i] = c;
i = i + 1;
} while(0 != c);
}
if(0 != (FHCRC & r->FLG))
{
/* Not implemented */
fputs("FHCRC is not implemented at this time\n", stderr);
return NULL;
}
if(NULL == r->FLG_FNAME)
{
count = strlen(name) - 3;
r->FLG_FNAME = calloc(count + 4, sizeof(char));
i = 0;
while(i < count)
{
r->FLG_FNAME[i] = name[i];
i = i + 1;
}
}
r->block = calloc(r->file_size, sizeof(char));
count = fread(r->block, sizeof(char), r->file_size, f);
r->ISIZE = count;
fclose(f);
return r;
}
int main(int argc, char **argv)
{
struct puffer* ret;
char* name;
char* buffer;
char *dest;
struct gz* in;
FILE* out;
int FUZZING = FALSE;
/* process arguments */
int i = 1;
while (i < argc)
{
if(NULL == argv[i])
{
i = i + 1;
}
else if(match(argv[i], "-f") || match(argv[i], "--file"))
{
name = argv[i+1];
require(NULL != name, "the --file option requires a filename to be given\n");
i = i + 2;
}
else if(match(argv[i], "-o") || match(argv[i], "--output"))
{
dest = argv[i+1];
require(NULL != dest, "the --output option requires a filename to be given\n");
i = i + 2;
}
else if(match(argv[i], "--chaos") || match(argv[i], "--fuzz-mode") || match(argv[i], "--fuzzing"))
{
FUZZING = TRUE;
fputs("fuzz-mode enabled, preparing for chaos\n", stderr);
i = i + 1;
}
else if(match(argv[i], "-h") || match(argv[i], "--help"))
{
fputs("Usage: ", stderr);
fputs(argv[0], stderr);
fputs(" --file $input.gz", stderr);
fputs(" [--output $output] (or it'll use the internal filename)\n", stderr);
fputs("--help to get this message\n", stderr);
fputs("--fuzz-mode if you wish to fuzz this application safely\n", stderr);
exit(EXIT_SUCCESS);
}
else
{
fputs("Unknown option:", stderr);
fputs(argv[i], stderr);
fputs("\nAborting to avoid problems\n", stderr);
exit(EXIT_FAILURE);
}
}
in = load(name);
if (in == NULL)
{
fputs("memory allocation failure\nDidn't read file\n", stderr);
exit(1);
}
ret = puff(0, 0, in->block, in->ISIZE);
if(NULL == dest)
{
dest = in->FLG_FNAME;
}
fputs(name, stderr);
fputs(" => ", stderr);
fputs(dest, stderr);
if (0 != ret->error)
{
fputs("\npuff() failed with return code ", stderr);
fputs(int2str(ret->error, 10, TRUE), stderr);
fputc('\n', stderr);
exit(3);
}
else
{
fputs(": succeeded uncompressing ", stderr);
fputs(int2str(ret->destlen, 10, FALSE), stderr);
fputs(" bytes\n", stderr);
}
buffer = malloc(ret->destlen);
if (buffer == NULL)
{
fputs("memory allocation failure\n", stderr);
return 4;
}
ret = puff(buffer, ret->destlen, in->block, in->ISIZE);
if(!FUZZING)
{
out = fopen(dest, "w");
fwrite(buffer, 1, ret->destlen, out);
}
else
{
fputs("skipped write to file due to --fuzz-mode flag\n", stderr);
}
free(buffer);
/* clean up */
return 0;
}
/* Copyright (C) 2019 pts@fazekas.hu
* Copyright (C) 2024 Jeremiah Orians
* Copyright (C) 2024 Gábor Stefanik
* This file is part of mescc-tools-extra
*
* mescc-tools-extra is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools-extra is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools-extra. If not, see <http://www.gnu.org/licenses/>.
*
* Built upon the great work in:
* muxzcat.c: tiny .xz and .lzma decompression filter
* by pts@fazekas.hu at Wed Jan 30 15:15:23 CET 2019
* from https://github.com/pts/muxzcat
* For .xz it supports only LZMA2 (no other filters such as BCJ).
* For .lzma it doesn't work with files with 5 <= lc + lp <= 12.
* It doesn't verify checksums (e.g. CRC-32 and CRC-64).
* It extracts the first stream only, and it ignores the index.
*
* LZMA algorithm implementation based on
* https://github.com/pts/pts-tiny-7z-sfx/commit/b9a101b076672879f861d472665afaa6caa6fec1
* , which is based on 7z922.tar.bz2.
*/
#include <stdio.h>
#include <string.h> /* memcpy(), memmove() */
#include <unistd.h> /* read(), write() */
#include <stdint.h>
#include <stdlib.h> /* realloc() */
#include "bootstrappable.c"
/* Constants needed */
#define SZ_OK 0
#define SZ_ERROR_DATA 1
#define SZ_ERROR_MEM 2 /* Out of memory. */
#define SZ_ERROR_CRC 3
#define SZ_ERROR_UNSUPPORTED 4
#define SZ_ERROR_PARAM 5
#define SZ_ERROR_INPUT_EOF 6
/*#define SZ_ERROR_OUTPUT_EOF 7*/
#define SZ_ERROR_READ 8
#define SZ_ERROR_WRITE 9
#define SZ_ERROR_FINISHED_WITH_MARK 15 /* LzmaDec_DecodeToDic stream was finished with end mark. */
#define SZ_ERROR_NOT_FINISHED 16 /* LzmaDec_DecodeToDic stream was not finished, i.e. dicfLimit reached while there is input to decompress */
#define SZ_ERROR_NEEDS_MORE_INPUT 17 /* LzmaDec_DecodeToDic, you must provide more input bytes */
/*#define SZ_MAYBE_FINISHED_WITHOUT_MARK SZ_OK*/ /* LzmaDec_DecodeToDic, there is probability that stream was finished without end mark */
#define SZ_ERROR_CHUNK_NOT_CONSUMED 18
#define SZ_ERROR_NEEDS_MORE_INPUT_PARTIAL 17 /* LzmaDec_DecodeToDic, more input needed, but existing input was partially processed */
#define LZMA_REQUIRED_INPUT_MAX 20
#define LZMA_BASE_SIZE 1846
#define LZMA_LIT_SIZE 768
#define LZMA2_LCLP_MAX 4
#define MAX_DIC_SIZE 1610612736 /* ~1.61 GB. 2 GiB is user virtual memory limit for many 32-bit systems. */
#define MAX_DIC_SIZE_PROP 37
#define MAX_MATCH_SIZE 273
#define kNumTopBits 24
#define kTopValue (1 << kNumTopBits)
#define kNumBitModelTotalBits 11
#define kBitModelTotal (1 << kNumBitModelTotalBits)
#define kNumMoveBits 5
#define RC_INIT_SIZE 5
#define kNumPosBitsMax 4
#define kNumPosStatesMax (1 << kNumPosBitsMax)
#define kLenNumLowBits 3
#define kLenNumLowSymbols (1 << kLenNumLowBits)
#define kLenNumMidBits 3
#define kLenNumMidSymbols (1 << kLenNumMidBits)
#define kLenNumHighBits 8
#define kLenNumHighSymbols (1 << kLenNumHighBits)
#define LenChoice 0
#define LenChoice2 (LenChoice + 1)
#define LenLow (LenChoice2 + 1)
#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
#define kNumStates 12
#define kNumLitStates 7
#define kStartPosModelIndex 4
#define kEndPosModelIndex 14
#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
#define kNumPosSlotBits 6
#define kNumLenToPosStates 4
#define kNumAlignBits 4
#define kAlignTableSize (1 << kNumAlignBits)
#define kMatchMinLen 2
#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols)
#define IsMatch 0
#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
#define IsRepG0 (IsRep + kNumStates)
#define IsRepG1 (IsRepG0 + kNumStates)
#define IsRepG2 (IsRepG1 + kNumStates)
#define IsRep0Long (IsRepG2 + kNumStates)
#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
#define LenCoder (Align + kAlignTableSize)
#define RepLenCoder (LenCoder + kNumLenProbs)
#define Literal (RepLenCoder + kNumLenProbs)
#define LZMA_DIC_MIN (1 << 12)
#define SZ_ERROR_BAD_MAGIC 51
#define SZ_ERROR_BAD_STREAM_FLAGS 52 /* SZ_ERROR_BAD_MAGIC is reported instead. */
#define SZ_ERROR_UNSUPPORTED_FILTER_COUNT 53
#define SZ_ERROR_BAD_BLOCK_FLAGS 54
#define SZ_ERROR_UNSUPPORTED_FILTER_ID 55
#define SZ_ERROR_UNSUPPORTED_FILTER_PROPERTIES_SIZE 56
#define SZ_ERROR_BAD_PADDING 57
#define SZ_ERROR_BLOCK_HEADER_TOO_LONG 58
#define SZ_ERROR_BAD_CHUNK_CONTROL_BYTE 59
#define SZ_ERROR_BAD_CHECKSUM_TYPE 60
#define SZ_ERROR_BAD_DICTIONARY_SIZE 61
#define SZ_ERROR_UNSUPPORTED_DICTIONARY_SIZE 62
#define SZ_ERROR_FEED_CHUNK 63
/*#define SZ_ERROR_NOT_FINISHED_WITH_MARK 64*/
#define SZ_ERROR_BAD_DICPOS 65
#define SZ_ERROR_MISSING_INITPROP 67
#define SZ_ERROR_BAD_LCLPPB_PROP 68
#define FILTER_ID_LZMA2 0x21
// 65536 + 12 * 1 byte (sizeof(uint8_t)
#define sizeof_readBuf 65548
#define sizeof_writeBuf 0x1000000
#define MAX_DICF_SIZE (MAX_DIC_SIZE + MAX_MATCH_SIZE + sizeof_writeBuf) /* Maximum number of bytes in global.dicf. */
#define DUMMY_ERROR 0 /* unexpected end of input stream */
#define DUMMY_LIT 1
#define DUMMY_MATCH 2
#define DUMMY_REP 3
/* (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << LZMA2_LCLP_MAX)) */
#define probs_size 14134
#define BIT31 (1<<31)
#define BITS32 (0x7FFFFFFF | BIT31)
#define HIGHBITS (0xFFFFFFFF - BITS32)
FILE* destination;
FILE* source;
uint32_t pos;
/* For LZMA streams, lc <= 8, lp <= 4, lc + lp <= 8 + 4 == 12.
* For LZMA2 streams, lc + lp <= 4.
* Minimum value: 1846.
* Maximum value for LZMA streams: 1846 + (768 << (8 + 4)) == 3147574.
* Maximum value for LZMA2 streams: 1846 + (768 << 4) == 14134.
* Memory usage of prob: sizeof(uint32_t) * value == (2 or 4) * value bytes.
*/
struct CLzmaDec
{
/* lc, lp and pb would fit into a byte, but i386 code is shorter as uint32_t.
*
* Constraints:
*
* * (0 <= lc <= 8) by LZMA.
* * 0 <= lc <= 4 by LZMA2 and muxzcat-LZMA and muzxcat-LZMA2.
* * 0 <= lp <= 4.
* * 0 <= pb <= 4.
* * (0 <= lc + lp == 8 + 4 <= 12) by LZMA.
* * 0 <= lc + lp <= 4 by LZMA2 and muxzcat-LZMA and muxzcat-LZMA2.
*/
uint32_t lc;
uint32_t lp;
uint32_t pb; /* Configured in prop byte. */
/* Maximum lookback delta.
* More optimized implementations (but not this version of muxzcat) need
* that many bytes of storage for the dictionary. muxzcat uses more,
* because it keeps the entire decompression output in memory, for
* the simplicity of the implementation.
* Configured in dicSizeProp byte. Maximum LZMA and LZMA2 supports is 0xffffffff,
* maximum we support is MAX_DIC_SIZE == 1610612736.
*/
uint32_t dicSize;
uint8_t *buf;
uint32_t range;
uint32_t code;
uint32_t dicfPos; /* The next decompression output byte will be written to dicf + dicfPos. */
uint32_t dicfLimit; /* It's OK to write this many decompression output bytes to dic. GrowDic(dicfPos + len) must be called before writing len bytes at dicfPos. */
uint32_t writtenPos; /* Decompression output bytes dicf[:writtenPos] are already written to the output file. writtenPos <= dicfPos. */
uint32_t discardedSize; /* Number of decompression output bytes discarded. */
uint32_t writeRemaining; /* Maximum number of remaining bytes to write, or ~0 for unlimited. */
uint32_t allocCapacity; /* Number of bytes allocated in dic. */
uint32_t processedPos; /* Decompression output byte count since the last call to LzmaDec_InitDicAndState(TRUE, ...); */
uint32_t checkDicSize;
uint32_t state;
uint32_t reps[4];
uint32_t remainLen;
uint32_t tempBufSize;
uint32_t probs[probs_size];
int needFlush;
int needInitLzma;
int needInitDic;
int needInitState;
int needInitProp;
uint8_t tempBuf[LZMA_REQUIRED_INPUT_MAX];
/* Contains the decompresison output, and used as the lookback dictionary.
* allocCapacity bytes are allocated, it's OK to grow it up to dicfLimit.
*/
uint8_t *dicf;
uint8_t* readBuf;
uint8_t* readCur;
uint8_t* readEnd;
};
/* globals needed */
struct CLzmaDec* global;
int FUZZING;
/* Writes uncompressed data (global.dicf[global.writtenPos : global.dicfPos] to stdout. */
void Flush(void)
{
/* print the bytes in the buffer until done */
uint8_t* p = global->dicf + global->writtenPos;
uint8_t* q = global->dicf + global->dicfPos;
while(p < q)
{
fputc(0xFF & p[0], destination);
p = p + 1;
}
global->writtenPos = global->dicfPos;
}
void FlushDiscardOldFromStartOfDic(void)
{
if(global->dicfPos > global->dicSize)
{
uint32_t delta = global->dicfPos - global->dicSize;
if(delta + MAX_MATCH_SIZE >= sizeof_writeBuf)
{
Flush();
global->dicf = memmove(global->dicf, global->dicf + delta, global->dicSize);
global->dicfPos = global->dicfPos - delta;
global->dicfLimit = global->dicfLimit - delta;
global->writtenPos = global->writtenPos - delta;
global->discardedSize = global->discardedSize + delta;
}
}
}
void GrowCapacity(uint32_t newCapacity)
{
if(newCapacity > global->allocCapacity)
{
/* make sure we don't alloc too much */
require(newCapacity <= MAX_DICF_SIZE, "GrowCapacity exceeds MAX_DICF_SIZE");
/* Get our new block */
uint8_t* dicf = calloc(newCapacity, sizeof(uint8_t));
require(NULL != dicf, "GrowCapacity memory allocation failed");
/* copy our old block into it and get rid of the old block */
if (NULL != global->dicf) {
memcpy(dicf, global->dicf, global->allocCapacity);
free(global->dicf);
}
/* now track that new state */
global->dicf = dicf;
global->allocCapacity = newCapacity;
}
/* else no need to grow */
}
void FlushDiscardGrowDic(uint32_t dicfPosDelta)
{
uint32_t minCapacity = global->dicfPos + dicfPosDelta;
uint32_t newCapacity;
if(minCapacity > global->allocCapacity)
{
FlushDiscardOldFromStartOfDic();
minCapacity = global->dicfPos + dicfPosDelta;
if(minCapacity > global->allocCapacity)
{
/* start by assuming 64KB */
newCapacity = (1 << 16);
while(newCapacity + MAX_MATCH_SIZE < minCapacity)
{
/* No overflow. */
if(newCapacity > global->dicSize)
{
newCapacity = global->dicSize;
if(newCapacity + MAX_MATCH_SIZE < minCapacity)
{
newCapacity = minCapacity - MAX_MATCH_SIZE;
}
break;
}
newCapacity = newCapacity << 1;
}
GrowCapacity(newCapacity + MAX_MATCH_SIZE);
}
}
}
void LzmaDec_DecodeReal(uint32_t limit, uint8_t *bufLimit)
{
uint32_t *probs = global->probs;
uint32_t state = global->state;
uint32_t rep0 = global->reps[0];
uint32_t rep1 = global->reps[1];
uint32_t rep2 = global->reps[2];
uint32_t rep3 = global->reps[3];
uint32_t pbMask = (1 << (global->pb)) - 1;
uint32_t lpMask = (1 << (global->lp)) - 1;
uint32_t lc = global->lc;
uint8_t* dicl = global->dicf;
uint32_t diclLimit = global->dicfLimit;
uint32_t diclPos = global->dicfPos;
uint32_t processedPos = global->processedPos;
uint32_t checkDicSize = global->checkDicSize;
uint32_t len = 0;
uint8_t* buf = global->buf;
uint32_t range = global->range;
uint32_t code = global->code;
uint32_t* prob;
uint32_t bound;
uint32_t ttt;
uint32_t posState;
uint32_t symbol;
uint32_t matchByte;
uint32_t offs;
uint32_t bit;
uint32_t* probLit;
uint32_t distance;
uint32_t limita;
uint32_t *probLen;
uint32_t offset;
uint32_t posSlot;
uint32_t numDirectBits;
uint32_t mask;
uint32_t i;
uint32_t n;
uint32_t t;
uint32_t rem;
uint32_t curLen;
uint32_t pos;
uint8_t* p;
do
{
posState = processedPos & pbMask;
p = probs;
prob = p + 4 * (IsMatch + (state << kNumPosBitsMax) + posState);
ttt = prob[0];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
p = probs;
prob = p + 4 * Literal;
if(checkDicSize != 0 || processedPos != 0)
{
if(diclPos == 0)
{
p = prob;
prob = p + 4 * (LZMA_LIT_SIZE * (((processedPos & lpMask) << lc) + (0xFF & dicl[(diclLimit) - 1])) >> (8 - lc));
}
else
{
p = prob;
prob = p + 4 *(LZMA_LIT_SIZE * ((((processedPos & lpMask) << lc) + (0xFF & dicl[diclPos - 1])) >> (8 - lc)));
}
}
if(state < kNumLitStates)
{
if(state < 4) state = 0;
else state = state - 3;
symbol = 1;
do
{
ttt = prob[symbol];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[symbol] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[symbol]);
symbol = (symbol + symbol);
}
else
{
range = range - bound;
code = code - bound;
prob[symbol] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[symbol]);
symbol = (symbol + symbol) + 1;
}
} while(symbol < 0x100);
}
else
{
if(diclPos < rep0) matchByte = 0xFF & dicl[(diclPos - rep0) + diclLimit];
else matchByte = 0xFF & dicl[(diclPos - rep0)];
offs = 0x100;
if(state < 10) state = state - 3;
else state = state - 6;
symbol = 1;
do
{
matchByte = matchByte << 1;
bit = (matchByte & offs);
p = prob;
probLit = p + 4 * (offs + bit + symbol);
ttt = probLit[0];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
probLit[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & probLit[0]);
symbol = (symbol + symbol);
offs = offs & ~bit;
}
else
{
range = range - bound;
code = code - bound;
probLit[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & probLit[0]);
symbol = (symbol + symbol) + 1;
offs = offs & bit;
}
} while(symbol < 0x100);
}
if(diclPos >= global->allocCapacity)
{
global->dicfPos = diclPos;
FlushDiscardGrowDic(1);
dicl = global->dicf;
diclLimit = global->dicfLimit;
diclPos = global->dicfPos;
}
dicl[diclPos] = (0xFF & symbol) | ((~0xFF) & dicl[diclPos]);
diclPos = diclPos + 1;
processedPos = processedPos + 1;
continue;
}
else
{
range = range - bound;
code = code - bound;
prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
p = probs;
prob = p + 4 * (IsRep + state);
ttt = prob[0];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
state = state + kNumStates;
p = probs;
prob = p + 4 * LenCoder;
}
else
{
range = range - bound;
code = code - bound;
prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
require((checkDicSize != 0) || (processedPos != 0), "checkDicsize == 0 && processPos == 0");
p = probs;
prob = p + 4 * (IsRepG0 + state);
ttt = prob[0];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
p = probs;
prob = p + 4 * (IsRep0Long + (state << kNumPosBitsMax) + posState);
ttt = prob[0];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
if(diclPos >= global->allocCapacity)
{
global->dicfPos = diclPos;
FlushDiscardGrowDic(1);
dicl = global->dicf;
diclLimit = global->dicfLimit;
diclPos = global->dicfPos;
}
if(diclPos < rep0) dicl[diclPos] = (0xFF & dicl[(diclPos - rep0) + diclLimit]) | ((~0xFF) & dicl[diclPos]);
else dicl[diclPos] = (0xFF & dicl[(diclPos - rep0)]) | ((~0xFF) & dicl[diclPos]);
diclPos = diclPos + 1;
processedPos = processedPos + 1;
if(state < kNumLitStates) state = 9;
else state = 11;
continue;
}
range = range - bound;
code = code - bound;
prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
}
else
{
range = range - bound;
code = code - bound;
prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
p = probs;
prob = p + 4 * (IsRepG1 + state);
ttt = prob[0];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
distance = rep1;
}
else
{
range = range - bound;
code = code - bound;
prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
p = probs;
prob = p + 4 * (IsRepG2 + state);
ttt = prob[0];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
distance = rep2;
}
else
{
range = range - bound;
code = code - bound;
prob[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[0]);
distance = rep3;
rep3 = rep2;
}
rep2 = rep1;
}
rep1 = rep0;
rep0 = distance;
}
if(state < kNumLitStates) state = 8;
else state = 11;
p = probs;
prob = p + 4 * RepLenCoder;
}
p = prob;
probLen = p + 4 * LenChoice;
ttt = probLen[0];
if(range < kTopValue)
{
range <<= 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
probLen[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & probLen[0]);
p = prob;
probLen = p + 4 * (LenLow + (posState << kLenNumLowBits));
offset = 0;
limita = (1 << kLenNumLowBits);
}
else
{
range = range - bound;
code = code - bound;
probLen[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & probLen[0]);
p = prob;
probLen = p + 4 * LenChoice2;
ttt = probLen[0];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
probLen[0] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & probLen[0]);
p = prob;
probLen = p + 4 * (LenMid + (posState << kLenNumMidBits));
offset = kLenNumLowSymbols;
limita = (1 << kLenNumMidBits);
}
else
{
range = range - bound;
code = code - bound;
probLen[0] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & probLen[0]);
p = prob;
probLen = p + 4 * LenHigh;
offset = kLenNumLowSymbols + kLenNumMidSymbols;
limita = (1 << kLenNumHighBits);
}
}
len = 1;
do
{
ttt = probLen[len];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
probLen[len] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & probLen[len]);
len = (len + len);
}
else
{
range = range - bound;
code = code - bound;
probLen[len] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & probLen[len]);
len = (len + len) + 1;
}
} while(len < limita);
len = len - limita + offset;
if(state >= kNumStates)
{
if(len < kNumLenToPosStates) { p = probs; prob = p + 4 * (PosSlot + (len << kNumPosSlotBits)); }
else { p = probs; prob = p + 4 * (PosSlot + ((kNumLenToPosStates - 1) << kNumPosSlotBits)); }
distance = 1;
do
{
ttt = prob[distance];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[distance] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[distance]);
distance = (distance + distance);
}
else
{
range = range - bound;
code = code - bound;
prob[distance] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[distance]);
distance = (distance + distance) + 1;
}
} while(distance < (1 << 6));
distance = distance - (1 << 6);
if(distance >= kStartPosModelIndex)
{
posSlot = distance;
numDirectBits = (distance >> 1) - 1;
distance = (2 | (distance & 1));
if(posSlot < kEndPosModelIndex)
{
distance = distance << numDirectBits;
p = probs;
prob = p + 4 * (SpecPos + distance - posSlot - 1);
mask = 1;
i = 1;
do
{
ttt = prob[i];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[i] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
i = (i + i);
}
else
{
range = range - bound;
code = code - bound;
prob[i] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
i = (i + i) + 1;
distance = distance | mask;
}
mask = mask << 1;
numDirectBits = numDirectBits - 1;
} while(numDirectBits != 0);
}
else
{
numDirectBits = numDirectBits - kNumAlignBits;
do
{
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
range = range >> 1;
{
code = code - range;
t = (0 - (code >> 31));
distance = (distance << 1) + (t + 1);
code = code + (range & t);
}
numDirectBits = numDirectBits - 1;
} while(numDirectBits != 0);
p = probs;
prob = p + 4 * Align;
distance = distance << kNumAlignBits;
i = 1;
ttt = prob[i];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[i] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
i = (i + i);
}
else
{
range = range - bound;
code = code - bound;
prob[i] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
i = (i + i) + 1;
distance = distance | 1;
}
ttt = prob[i];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[i] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
i = (i + i);
}
else
{
range = range - bound;
code = code - bound;
prob[i] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
i = (i + i) + 1;
distance = distance | 2;
}
ttt = prob[i];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[i] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
i = (i + i);
}
else
{
range = range - bound;
code = code - bound;
prob[i] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
i = (i + i) + 1;
distance = distance | 4;
}
ttt = prob[i];
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
prob[i] = (BITS32 & ((ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
i = (i + i);
}
else
{
range = range - bound;
code = code - bound;
prob[i] = (BITS32 & ((ttt - (ttt >> kNumMoveBits)))) | (HIGHBITS & prob[i]);
i = (i + i) + 1;
distance = distance | 8;
}
if(distance == BITS32)
{
len = len + kMatchSpecLenStart;
state = state - kNumStates;
break;
}
}
}
rep3 = rep2;
rep2 = rep1;
rep1 = rep0;
rep0 = distance + 1;
if(checkDicSize == 0) require(distance < processedPos , "distance >= processedPos");
else require(distance < checkDicSize, "distance >= checkDicSize");
if(state < kNumStates + kNumLitStates) state = kNumLitStates;
else state = kNumLitStates + 3;
}
len = len + kMatchMinLen;
require(len <= MAX_MATCH_SIZE, "len greater than MAX_MATCH_SIZE");
require(limit != diclPos, "limit == diclPos");
rem = limit - diclPos;
if(rem < len) curLen = rem;
else curLen = len;
if(diclPos < rep0) pos = (diclPos - rep0) + diclLimit;
else pos = diclPos - rep0;
processedPos = processedPos + curLen;
len = len - curLen;
/* TODO(pts): ASSERT(len == curLen);, simplify buffering code. */
/* + cannot overflow. */
if((diclPos + curLen) > global->allocCapacity)
{
global->dicfPos = diclPos;
FlushDiscardGrowDic(curLen);
pos = pos + global->dicfPos - diclPos;
dicl = global->dicf;
diclLimit = global->dicfLimit;
diclPos = global->dicfPos;
}
if((pos + curLen) <= diclLimit)
{
require(diclPos > pos, "diclPos > pos");
require(curLen > 0, "curLen > 0");
i = 0;
n = curLen;
/* overlapping memcpy of sorts */
while(n > 0)
{
dicl[diclPos + i] = (0xFF & dicl[pos + i]) | ((~0xFF) & dicl[diclPos + i]);
i = i + 1;
n = n - 1;
}
diclPos = diclPos + curLen;
}
else
{
do
{
dicl[diclPos] = (0xFF & dicl[pos]) | ((~0xFF) & dicl[diclPos]);
diclPos = diclPos + 1;
pos = pos + 1;
if(pos == diclLimit)
{
pos = 0;
}
curLen = curLen - 1;
} while(curLen != 0);
}
}
} while((diclPos < limit) && (buf < bufLimit));
if(range < kTopValue)
{
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
global->buf = buf;
global->range = range;
global->code = code;
global->remainLen = len;
global->dicfPos = diclPos;
global->processedPos = processedPos;
global->reps[0] = rep0;
global->reps[1] = rep1;
global->reps[2] = rep2;
global->reps[3] = rep3;
global->state = state;
}
void LzmaDec_WriteRem(uint32_t limit)
{
uint8_t *dicl;
uint32_t diclPos;
uint32_t diclLimit;
uint32_t len;
uint32_t rep0;
if(global->remainLen != 0 && global->remainLen < kMatchSpecLenStart)
{
dicl = global->dicf;
diclPos = global->dicfPos;
diclLimit = global->dicfLimit;
len = global->remainLen;
rep0 = global->reps[0];
if(limit - diclPos < len)
{
len = limit - diclPos;
}
if(diclPos + len > global->allocCapacity)
{
FlushDiscardGrowDic(len);
dicl = global->dicf;
diclLimit = global->dicfLimit;
diclPos = global->dicfPos;
}
if((global->checkDicSize == 0) && ((global->dicSize - global->processedPos) <= len))
{
global->checkDicSize = global->dicSize;
}
global->processedPos = global->processedPos + len;
global->remainLen = global->remainLen - len;
while(len != 0)
{
len = len - 1;
if(diclPos < rep0) dicl[diclPos] = (0xFF & dicl[(diclPos - rep0) + diclLimit]) | ((~0xFF) & dicl[diclPos]);
else dicl[diclPos] = (0xFF & dicl[diclPos - rep0]) | ((~0xFF) & dicl[diclPos]);
diclPos = diclPos + 1;
}
global->dicfPos = diclPos;
}
}
void LzmaDec_DecodeReal2(uint32_t limit, uint8_t *bufLimit)
{
uint32_t limit2;
uint32_t rem;
do
{
limit2 = limit;
if(global->checkDicSize == 0)
{
rem = global->dicSize - global->processedPos;
if((limit - global->dicfPos) > rem)
{
limit2 = global->dicfPos + rem;
}
}
LzmaDec_DecodeReal(limit2, bufLimit);
if(global->processedPos >= global->dicSize)
{
global->checkDicSize = global->dicSize;
}
LzmaDec_WriteRem(limit);
} while((global->dicfPos < limit) && (global->buf < bufLimit) && (global->remainLen < kMatchSpecLenStart));
if(global->remainLen > kMatchSpecLenStart)
{
global->remainLen = kMatchSpecLenStart;
}
}
int LzmaDec_TryDummy(uint8_t* buf, uint32_t inSize)
{
uint32_t range = global->range;
uint32_t code = global->code;
uint8_t* bufLimit = buf + inSize;
uint32_t* probs = global->probs;
uint32_t state = global->state;
int res;
uint32_t* prob;
uint32_t bound;
uint32_t ttt;
uint32_t posState;
uint32_t hold;
uint32_t symbol;
uint32_t matchByte;
uint32_t offs;
uint32_t bit;
uint32_t* probLit;
uint32_t len;
uint32_t limit;
uint32_t offset;
uint32_t* probLen;
uint32_t posSlot;
uint32_t numDirectBits;
uint32_t i;
uint8_t* p;
posState = (global->processedPos) & ((1 << global->pb) - 1);
p = probs;
prob = p + 4 * (IsMatch + (state << kNumPosBitsMax) + posState);
ttt = prob[0];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
p = probs;
prob = p + 4 * Literal;
if(global->checkDicSize != 0 || global->processedPos != 0)
{
hold = (((global->processedPos) & ((1 << (global->lp)) - 1)) << global->lc);
if(global->dicfPos == 0)
{
hold = hold + ((0xFF & global->dicf[global->dicfLimit - 1]) >> (8 - global->lc));
}
else
{
hold = hold + ((0xFF & global->dicf[global->dicfPos - 1]) >> (8 - global->lc));
}
p = prob;
prob = p + 4 * (LZMA_LIT_SIZE * hold);
}
if(state < kNumLitStates)
{
symbol = 1;
do
{
ttt = prob[symbol];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
symbol = (symbol + symbol);
}
else
{
range = range - bound;
code = code - bound;
symbol = (symbol + symbol) + 1;
}
} while(symbol < 0x100);
}
else
{
if(global->dicfPos < (global->reps[0] & BITS32))
{
hold = global->dicfPos - (global->reps[0] & BITS32) + global->dicfLimit;
}
else hold = global->dicfPos - (global->reps[0] & BITS32);
matchByte = 0xFF & global->dicf[hold];
offs = 0x100;
symbol = 1;
do
{
matchByte = matchByte << 1;
bit = (matchByte & offs);
p = prob;
probLit = p + 4 * (offs + bit + symbol);
ttt = probLit[0];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
symbol = (symbol + symbol);
offs = offs & ~bit;
}
else
{
range = range - bound;
code = code - bound;
symbol = (symbol + symbol) + 1;
offs = offs & bit;
}
} while(symbol < 0x100);
}
res = DUMMY_LIT;
}
else
{
range = range - bound;
code = code - bound;
p = probs;
prob = p + 4 * (IsRep + state);
ttt = prob[0];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
state = 0;
p = probs;
prob = p + 4 * LenCoder;
res = DUMMY_MATCH;
}
else
{
range = range - bound;
code = code - bound;
res = DUMMY_REP;
p = probs;
prob = p + 4 * (IsRepG0 + state);
ttt = prob[0];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
p = probs;
prob = p + 4 * (IsRep0Long + (state << kNumPosBitsMax) + posState);
ttt = prob[0];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
return DUMMY_REP;
}
else
{
range = range - bound;
code = code - bound;
}
}
else
{
range = range - bound;
code = code - bound;
p = probs;
prob = p + 4 * (IsRepG1 + state);
ttt = prob[0];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
}
else
{
range = range - bound;
code = code - bound;
p = probs;
prob = p + 4 * (IsRepG2 + state);
ttt = prob[0];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
}
else
{
range = range - bound;
code = code - bound;
}
}
}
state = kNumStates;
p = probs;
prob = p + 4 * RepLenCoder;
}
p = prob;
probLen = p + 4 * LenChoice;
ttt = probLen[0];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
p = prob;
probLen = p + 4 * (LenLow + (posState << kLenNumLowBits));
offset = 0;
limit = 1 << kLenNumLowBits;
}
else
{
range = range - bound;
code = code - bound;
p = prob;
probLen = p + 4 * LenChoice2;
ttt = probLen[0];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
p = prob;
probLen = p + 4 * (LenMid + (posState << kLenNumMidBits));
offset = kLenNumLowSymbols;
limit = 1 << kLenNumMidBits;
}
else
{
range = range - bound;
code = code - bound;
probLen = p + 4 * LenHigh;
offset = kLenNumLowSymbols + kLenNumMidSymbols;
limit = 1 << kLenNumHighBits;
}
}
len = 1;
do
{
ttt = probLen[len];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
len = (len + len);
}
else
{
range = range - bound;
code = code - bound;
len = (len + len) + 1;
}
} while(len < limit);
len = len - limit + offset;
if(state < 4)
{
if(len < kNumLenToPosStates) hold = len << kNumPosSlotBits;
else hold = (kNumLenToPosStates - 1) << kNumPosSlotBits;
p = probs;
prob = p + 4 * (PosSlot + hold);
posSlot = 1;
do
{
ttt = prob[posSlot];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
posSlot = (posSlot + posSlot);
}
else
{
range = range - bound;
code = code - bound;
posSlot = (posSlot + posSlot) + 1;
}
} while(posSlot < (1 << kNumPosSlotBits));
posSlot = posSlot - (1 << kNumPosSlotBits);
if(posSlot >= kStartPosModelIndex)
{
numDirectBits = ((posSlot >> 1) - 1);
if(posSlot < kEndPosModelIndex)
{
p = probs;
prob = p + 4 * (SpecPos + ((2 | (posSlot & 1)) << numDirectBits) - posSlot - 1);
}
else
{
numDirectBits = numDirectBits - kNumAlignBits;
do
{
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
range = range >> 1;
code = code - (range & ((((code - range) >> 31) & 1) - 1));
numDirectBits = numDirectBits - 1;
} while(numDirectBits != 0);
p = probs;
prob = p + 4 * Align;
numDirectBits = kNumAlignBits;
}
i = 1;
do
{
ttt = prob[i];
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
bound = (range >> kNumBitModelTotalBits) * ttt;
if(code < bound)
{
range = bound;
i = (i + i);
}
else
{
range = range - bound;
code = code - bound;
i = (i + i) + 1;
}
numDirectBits = numDirectBits - 1;
} while(numDirectBits != 0);
}
}
}
if(range < kTopValue)
{
if(buf >= bufLimit)
{
return DUMMY_ERROR;
}
/* is this even needed? */
range = range << 8;
code = (code << 8) | (0xFF & buf[0]);
buf = buf + 1;
}
return res;
}
void LzmaDec_InitRc(uint8_t* data)
{
global->code = ((0xFF & data[1]) << 24) | ((0xFF & data[2]) << 16) | ((0xFF & data[3]) << 8) | (0xFF & data[4]);
global->range = BITS32;
global->needFlush = FALSE;
}
void LzmaDec_InitDicAndState(int initDic, int initState)
{
global->needFlush = TRUE;
global->remainLen = 0;
global->tempBufSize = 0;
if(initDic)
{
global->processedPos = 0;
global->checkDicSize = 0;
global->needInitLzma = TRUE;
}
if(initState)
{
global->needInitLzma = TRUE;
}
}
void LzmaDec_InitStateReal(void)
{
uint32_t numProbs = Literal + (LZMA_LIT_SIZE << (global->lc + global->lp));
uint32_t i;
uint32_t* probs = global->probs;
for(i = 0; i < numProbs; i = i + 1)
{
probs[i] = (BITS32 & (kBitModelTotal >> 1)) | (HIGHBITS & probs[i]);
}
global->reps[0] = 1; global->reps[1] = 1; global->reps[2] = 1; global->reps[3] = 1;
global->state = 0;
global->needInitLzma = FALSE;
}
uint32_t LzmaDec_DecodeToDic(uint8_t* src, uint32_t srcLen)
{
uint32_t srcLen0 = srcLen;
uint32_t inSize = srcLen;
int checkEndMarkNow;
uint32_t processed;
uint8_t *bufLimit;
uint32_t dummyRes;
uint32_t rem;
uint32_t lookAhead;
srcLen = 0;
LzmaDec_WriteRem(global->dicfLimit);
while(global->remainLen != kMatchSpecLenStart)
{
if(global->needFlush)
{
while(inSize > 0 && global->tempBufSize < RC_INIT_SIZE)
{
global->tempBuf[global->tempBufSize] = 0xFF & src[0];
global->tempBufSize = global->tempBufSize + 1;
src = src + 1;
srcLen = srcLen + 1;
inSize = inSize - 1;
}
if(global->tempBufSize < RC_INIT_SIZE)
{
if(srcLen != srcLen0) return SZ_ERROR_NEEDS_MORE_INPUT_PARTIAL;
return SZ_ERROR_NEEDS_MORE_INPUT;
}
if((0xFF & global->tempBuf[0]) != 0) return SZ_ERROR_DATA;
LzmaDec_InitRc(global->tempBuf);
global->tempBufSize = 0;
}
checkEndMarkNow = FALSE;
if(global->dicfPos >= global->dicfLimit)
{
if((global->remainLen == 0) && (global->code == 0))
{
if(srcLen != srcLen0) return SZ_ERROR_CHUNK_NOT_CONSUMED;
return SZ_OK /* MAYBE_FINISHED_WITHOUT_MARK */;
}
if(global->remainLen != 0) return SZ_ERROR_NOT_FINISHED;
checkEndMarkNow = TRUE;
}
if(global->needInitLzma) LzmaDec_InitStateReal();
if(global->tempBufSize == 0)
{
if(inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow)
{
dummyRes = LzmaDec_TryDummy(src, inSize);
if(dummyRes == DUMMY_ERROR)
{
memcpy(global->tempBuf, src, inSize);
global->tempBufSize = inSize;
srcLen += inSize;
if(srcLen != srcLen0) return SZ_ERROR_NEEDS_MORE_INPUT_PARTIAL;
return SZ_ERROR_NEEDS_MORE_INPUT;
}
if(checkEndMarkNow && dummyRes != DUMMY_MATCH) return SZ_ERROR_NOT_FINISHED;
bufLimit = src;
}
else
{
bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX;
}
global->buf = src;
LzmaDec_DecodeReal2(global->dicfLimit, bufLimit);
processed = (global->buf - src);
srcLen = srcLen + processed;
src = src + processed;
inSize = inSize - processed;
}
else
{
rem = global->tempBufSize;
lookAhead = 0;
while((rem < LZMA_REQUIRED_INPUT_MAX) && (lookAhead < inSize))
{
global->tempBuf[rem] = 0xFF & src[lookAhead];
rem = rem + 1;
lookAhead = lookAhead + 1;
}
global->tempBufSize = rem;
if(rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow)
{
dummyRes = LzmaDec_TryDummy(global->tempBuf, rem);
if(dummyRes == DUMMY_ERROR)
{
srcLen = srcLen + lookAhead;
if(srcLen != srcLen0) return SZ_ERROR_NEEDS_MORE_INPUT_PARTIAL;
return SZ_ERROR_NEEDS_MORE_INPUT;
}
if(checkEndMarkNow && dummyRes != DUMMY_MATCH) return SZ_ERROR_NOT_FINISHED;
}
global->buf = global->tempBuf;
LzmaDec_DecodeReal2(global->dicfLimit, global->buf);
lookAhead = lookAhead - (rem - (global->buf - global->tempBuf));
srcLen = srcLen + lookAhead;
src = src + lookAhead;
inSize = inSize - lookAhead;
global->tempBufSize = 0;
}
}
if(global->code != 0) return SZ_ERROR_DATA;
return SZ_ERROR_FINISHED_WITH_MARK;
}
/* Tries to preread r bytes to the read buffer. Returns the number of bytes
* available in the read buffer. If smaller than r, that indicates EOF.
*
* Doesn't try to preread more than absolutely necessary, to avoid copies in
* the future.
*
* Works only if r <= sizeof(readBuf).
*/
uint32_t Preread(uint32_t r)
{
uint32_t hold;
uint32_t p = global->readEnd - global->readCur;
require(r <= sizeof_readBuf, "r <= sizeof_readBuf");
if(p < r) /* Not enough pending available. */
{
if(global->readBuf + sizeof_readBuf - global->readCur + 0 < r)
{
/* If no room for r bytes to the end, discard bytes from the beginning. */
global->readBuf = memmove(global->readBuf, global->readCur, p);
global->readEnd = global->readBuf + p;
global->readCur = global->readBuf;
}
while(p < r)
{
/* our single spot for reading input */
hold = fgetc(source);
pos = pos + 1;
/* EOF or error on input. */
if(EOF == hold) break;
/* otherwise just add it */
global->readEnd[0] = (0xFF & hold) | ((~0xFF) & global->readEnd[0]);
global->readEnd = global->readEnd + 1;
p = p + 1;
}
}
return p;
}
void IgnoreVarint(void)
{
while((0xFF & global->readCur[0]) >= 0x80)
{
global->readCur = global->readCur + 1;
}
global->readCur = global->readCur + 1;
}
uint32_t IgnoreZeroBytes(uint32_t c)
{
while(c > 0)
{
if((0xFF & global->readCur[0]) != 0)
{
global->readCur = global->readCur + 1;
return SZ_ERROR_BAD_PADDING;
}
global->readCur = global->readCur + 1;
c = c - 1;
}
return SZ_OK;
}
uint32_t GetLE4(uint8_t *p)
{
return (0xFF & p[0]) | (0xFF & p[1]) << 8 | (0xFF & p[2]) << 16 | (0xFF & p[3]) << 24;
}
/* Expects global->dicSize be set already. Can be called before or after InitProp. */
void InitDecode(void)
{
/* global->lc = global->pb = global->lp = 0; */ /* needinitprop will initialize it */
global->dicfLimit = 0; /* We'll increment it later. */
global->needInitDic = TRUE;
global->needInitState = TRUE;
global->needInitProp = TRUE;
global->writtenPos = 0;
global->writeRemaining = BITS32;
global->discardedSize = 0;
global->dicfPos = 0;
LzmaDec_InitDicAndState(TRUE, TRUE);
}
uint32_t InitProp(uint8_t b)
{
uint32_t lc;
uint32_t lp;
if(b >= (9 * 5 * 5))
{
return SZ_ERROR_BAD_LCLPPB_PROP;
}
lc = b % 9;
b = b / 9;
global->pb = b / 5;
lp = b % 5;
if(lc + lp > LZMA2_LCLP_MAX)
{
return SZ_ERROR_BAD_LCLPPB_PROP;
}
global->lc = lc;
global->lp = lp;
global->needInitProp = FALSE;
return SZ_OK;
}
/* Reads .xz or .lzma data from source, writes uncompressed bytes to destination,
* uses CLzmaDec.dic. It verifies some aspects of the file format (so it
* can't be tricked to an infinite loop etc.), it doesn't verify checksums
* (e.g. CRC32).
*/
uint32_t DecompressXzOrLzma(void)
{
uint8_t checksumSize;
/* Block header flags */
uint32_t bhf;
uint32_t result;
/* uncompressed chunk size*/
uint32_t us;
/* needed by lzma */
uint32_t srcLen;
uint32_t res;
/* needed by xz */
uint8_t blockSizePad;
uint32_t bhs;
uint32_t bhs2;
uint8_t dicSizeProp;
uint8_t* readAtBlock;
uint8_t control;
uint8_t numRecords;
/* compressed chunk size */
uint32_t cs;
int initDic;
uint8_t mode;
int initState;
int isProp;
/* 12 for the stream header + 12 for the first block header + 6 for the
* first chunk header. empty.xz is 32 bytes.
*/
if(Preread(12 + 12 + 6) < 12 + 12 + 6)
{
return SZ_ERROR_INPUT_EOF;
}
/* readbuf[7] is actually stream flags, should also be 0. */
if(0 != memcmp(global->readCur, "\xFD""7zXZ\0", 7))
{
/* sanity check for lzma */
require((0xFF & global->readCur[0]) <= 225, "lzma check 1 failed");
require((0xFF & global->readCur[13]) == 0, "lzma check 2 failed");
require((((bhf = GetLE4(global->readCur + 9)) == 0) || (bhf == BITS32)), "lzma check 3 failed");
require((global->dicSize = GetLE4(global->readCur + 1)) >= LZMA_DIC_MIN, "lzma check 4 failed");
/* Based on https://svn.python.org/projects/external/xz-5.0.3/doc/lzma-file-format.txt */
/* TODO(pts): Support 8-byte uncompressed size. */
if(bhf == 0) us = GetLE4(global->readCur + 5);
else us = bhf;
if(global->dicSize > MAX_DIC_SIZE) return SZ_ERROR_UNSUPPORTED_DICTIONARY_SIZE;
InitDecode();
global->allocCapacity = 0;
global->dicf = NULL;
/* LZMA2 restricts lc + lp <= 4. LZMA requires lc + lp <= 12.
* We apply the LZMA2 restriction here (to save memory in
* CLzmaDec.probs), thus we are not able to extract some legitimate
* .lzma files.
*/
result = (InitProp(0xFF & global->readCur[0]));
if(result != SZ_OK) return result;
global->readCur = global->readCur + 13; /* Start decompressing the 0 byte. */
global->dicfLimit = global->writeRemaining;
global->writeRemaining = us;
if(us <= global->dicSize) GrowCapacity(us);
while((global->discardedSize + global->dicfPos) != us)
{
if((srcLen = Preread(sizeof_readBuf)) == 0)
{
if(us != BITS32) return SZ_ERROR_INPUT_EOF;
break;
}
res = LzmaDec_DecodeToDic(global->readCur, srcLen);
global->readCur = global->readCur + srcLen;
if(res == SZ_ERROR_FINISHED_WITH_MARK) break;
if(res != SZ_ERROR_NEEDS_MORE_INPUT && res != SZ_OK) return res;
}
Flush();
return SZ_OK;
}
global->allocCapacity = 0;
global->dicf = NULL;
while(TRUE)
{
/* Based on https://tukaani.org/xz/xz-file-format-1.0.4.txt */
switch(0xFF & global->readCur[7])
{
/* None */
case 0: checksumSize = 1;
break;
/* CRC32 */
case 1: checksumSize = 4;
break;
/* CRC64, typical xz output. */
case 4: checksumSize = 8;
break;
default: return SZ_ERROR_BAD_CHECKSUM_TYPE;
}
/* Also ignore the CRC32 after checksumSize. */
global->readCur = global->readCur + 12;
while(TRUE)
{
/* We need it modulo 4, so a uint8_t is enough. */
blockSizePad = 3;
require(global->readEnd - global->readCur >= 12, "readEnd - readCur >= 12"); /* At least 12 bytes preread. */
bhs = 0xFF & global->readCur[0];
/* Last block, index follows. */
if(bhs == 0)
{
global->readCur = global->readCur + 1;
/* This is actually a varint, but it's shorter to read it as a byte. */
numRecords = 0xFF & global->readCur[0];
global->readCur = global->readCur + 1;
while(0 != numRecords) {
/* a varint is at most 9 bytes long, but may be shorter */
Preread(9);
IgnoreVarint();
Preread(9);
IgnoreVarint();
numRecords = numRecords - 1;
}
/* Synchronize to 4-byte boundary */
if (0 != ((pos - (global->readEnd - global->readCur)) & 3)) {
Preread(4 - ((pos - (global->readEnd - global->readCur)) & 3));
global->readCur = global->readCur + (4 - ((pos - (global->readEnd - global->readCur)) & 3));
}
/* Consume crc32 of index + stream footer */
Preread(16);
global->readCur = global->readCur + 16;
break;
}
global->readCur = global->readCur + 1;
/* Block header size includes the bhs field above and the CRC32 below. */
bhs = (bhs + 1) << 2;
/* Typically the Preread(12 + 12 + 6) above covers it. */
if(Preread(bhs) < bhs)
{
return SZ_ERROR_INPUT_EOF;
}
readAtBlock = global->readCur;
bhf = 0xFF & global->readCur[0];
global->readCur = global->readCur + 1;
if((bhf & 2) != 0) return SZ_ERROR_UNSUPPORTED_FILTER_COUNT;
if((bhf & 20) != 0) return SZ_ERROR_BAD_BLOCK_FLAGS;
/* Compressed size present. */
/* Usually not present, just ignore it. */
if((bhf & 64) != 0) IgnoreVarint();
/* Uncompressed size present. */
/* Usually not present, just ignore it. */
if((bhf & 128) != 0) IgnoreVarint();
/* This is actually a varint, but it's shorter to read it as a byte. */
if((0xFF & global->readCur[0]) != FILTER_ID_LZMA2) return SZ_ERROR_UNSUPPORTED_FILTER_ID;
global->readCur = global->readCur + 1;
/* This is actually a varint, but it's shorter to read it as a byte. */
if((0xFF & global->readCur[0]) != 1) return SZ_ERROR_UNSUPPORTED_FILTER_PROPERTIES_SIZE;
global->readCur = global->readCur + 1;
dicSizeProp = 0xFF & global->readCur[0];
global->readCur = global->readCur + 1;
/* Typical large dictionary sizes:
* 35: 805306368 bytes == 768 MiB
* 36: 1073741824 bytes == 1 GiB
* 37: 1610612736 bytes, largest supported by .xz
* 38: 2147483648 bytes == 2 GiB
* 39: 3221225472 bytes == 3 GiB
* 40: 4294967295 bytes, largest supported by .7z
*/
if(dicSizeProp > 40) return SZ_ERROR_BAD_DICTIONARY_SIZE;
/* LZMA2 and .xz support it, we don't (for simpler memory management on
* 32-bit systems).
*/
if(dicSizeProp > MAX_DIC_SIZE_PROP) return SZ_ERROR_UNSUPPORTED_DICTIONARY_SIZE;
/* Works if dicSizeProp <= 39. */
global->dicSize = ((2 | ((dicSizeProp) & 1)) << ((dicSizeProp) / 2 + 11));
/* TODO(pts): Free dic after use, also after realloc error. */
require(global->dicSize >= LZMA_DIC_MIN, "global->dicSize >= LZMA_DIC_MIN");
GrowCapacity(global->dicSize + MAX_MATCH_SIZE + sizeof_writeBuf);
bhs2 = global->readCur - readAtBlock + 5;
if(bhs2 > bhs) return SZ_ERROR_BLOCK_HEADER_TOO_LONG;
result = IgnoreZeroBytes(bhs - bhs2);
if(result != 0) return result;
/* Ignore CRC32. */
global->readCur = global->readCur + 4;
/* Typically it's offset 24, xz creates it by default, minimal. */
/* Finally Parse LZMA2 stream. */
InitDecode();
while(TRUE)
{
require(global->dicfPos == global->dicfLimit, "global->dicfPos == global->dicfLimit");
/* Actually 2 bytes is enough to get to the index if everything is
* aligned and there is no block checksum.
*/
if(Preread(6) < 6) return SZ_ERROR_INPUT_EOF;
control = 0xFF & global->readCur[0];
if(control == 0)
{
global->readCur = global->readCur + 1;
break;
}
else if(((control - 3) & 0xFF) < 0x7D) return SZ_ERROR_BAD_CHUNK_CONTROL_BYTE;
us = ((0xFF & global->readCur[1]) << 8) + (0xFF & global->readCur[2]) + 1;
/* Uncompressed chunk. */
if(control < 3)
{
/* assume it was already setup */
initDic = FALSE;
cs = us;
global->readCur = global->readCur + 3;
blockSizePad = blockSizePad - 3;
/* now test that assumption */
if(control == 1)
{
global->needInitProp = global->needInitState;
global->needInitState = TRUE;
global->needInitDic = FALSE;
}
else if(global->needInitDic) return SZ_ERROR_DATA;
LzmaDec_InitDicAndState(initDic, FALSE);
}
else
{
/* LZMA chunk. */
mode = (((control) >> 5) & 3);
if(mode == 3) initDic = TRUE;
else initDic = FALSE;
if(mode > 0) initState = TRUE;
else initState = FALSE;
if((control & 64) != 0) isProp = TRUE;
else isProp = FALSE;
us = us + ((control & 31) << 16);
cs = ((0xFF & global->readCur[3]) << 8) + (0xFF & global->readCur[4]) + 1;
if(isProp)
{
result = InitProp(0xFF & global->readCur[5]);
if(result != 0) return result;
global->readCur = global->readCur + 1;
blockSizePad = blockSizePad - 1;
}
else if(global->needInitProp) return SZ_ERROR_MISSING_INITPROP;
global->readCur = global->readCur + 5;
blockSizePad = blockSizePad - 5;
if((!initDic && global->needInitDic) || (!initState && global->needInitState))
{
return SZ_ERROR_DATA;
}
LzmaDec_InitDicAndState(initDic, initState);
global->needInitDic = FALSE;
global->needInitState = FALSE;
}
require(us <= (1 << 24), "us <= (1 << 24)");
require(cs <= (1 << 16), "cs <= (1 << 16)");
require(global->dicfPos == global->dicfLimit, "global->dicfPos == global->dicfLimit");
FlushDiscardOldFromStartOfDic();
global->dicfLimit = global->dicfLimit + us;
if(global->dicfLimit < us) return SZ_ERROR_MEM;
/* Read 6 extra bytes to optimize away a read(...) system call in
* the Prefetch(6) call in the next chunk header.
*/
if(Preread(cs + 6) < cs) return SZ_ERROR_INPUT_EOF;
/* Uncompressed chunk, at most 64 KiB. */
if(control < 3)
{
require((global->dicfPos + us) == global->dicfLimit, "global->dicfPos + us == global->dicfLimit");
FlushDiscardGrowDic(us);
memcpy(global->dicf + global->dicfPos, global->readCur, us);
global->dicfPos = global->dicfPos + us;
if((global->checkDicSize == 0) && ((global->dicSize - global->processedPos) <= us))
{
global->checkDicSize = global->dicSize;
}
global->processedPos = global->processedPos + us;
}
else
{
/* Compressed chunk. */
/* This call doesn't change global->dicfLimit. */
result = LzmaDec_DecodeToDic(global->readCur, cs);
if(result != 0) return result;
}
if(global->dicfPos != global->dicfLimit) return SZ_ERROR_BAD_DICPOS;
global->readCur = global->readCur + cs;
blockSizePad = blockSizePad - cs;
/* We can't discard decompressbuf[:global->dicfLimit] now,
* because we need it a dictionary in which subsequent calls to
* Lzma2Dec_DecodeToDic will look up backreferences.
*/
}
Flush();
/* End of LZMA2 stream. */
/* End of block. */
/* 7 for padding4 and CRC32 + 12 for the next block header + 6 for the next
* chunk header.
*/
if(Preread(7 + 12 + 6) < 7 + 12 + 6) return SZ_ERROR_INPUT_EOF;
/* Ignore block padding. */
result = (IgnoreZeroBytes(blockSizePad & 3));
if(result != 0) return result;
global->readCur = global->readCur + checksumSize; /* Ignore CRC32, CRC64 etc. */
}
/* Look for another concatenated stream */
/* 12 for the stream header + 12 for the first block header + 6 for the
* first chunk header. empty.xz is 32 bytes.
*/
if(Preread(12 + 12 + 6) < 12 + 12 + 6)
{
break;
}
if(0 != memcmp(global->readCur, "\xFD""7zXZ\0", 7)) {
break;
}
}
/* The .xz input file continues with the index, which we ignore from here. */
return SZ_OK;
}
int main(int argc, char **argv)
{
uint32_t res;
char* name;
char* dest;
FUZZING = FALSE;
name = NULL;
dest = NULL;
pos = 0;
/* process arguments */
int i = 1;
while (i < argc)
{
if(NULL == argv[i])
{
i = i + 1;
}
else if(match(argv[i], "-f") || match(argv[i], "--file"))
{
name = argv[i+1];
require(NULL != name, "the --file option requires a filename to be given\n");
i = i + 2;
}
else if(match(argv[i], "-o") || match(argv[i], "--output"))
{
dest = argv[i+1];
require(NULL != dest, "the --output option requires a filename to be given\n");
i = i + 2;
}
else if(match(argv[i], "--chaos") || match(argv[i], "--fuzz-mode") || match(argv[i], "--fuzzing"))
{
FUZZING = TRUE;
fputs("fuzz-mode enabled, preparing for chaos\n", stderr);
i = i + 1;
}
else if(match(argv[i], "-h") || match(argv[i], "--help"))
{
fputs("Usage: ", stderr);
fputs(argv[0], stderr);
fputs(" [--file $input.xz or --file $input.lzma] (or it'll read from stdin)\n", stderr);
fputs(" [--output $output] (or it'll write to stdout)\n", stderr);
fputs("--help to get this message\n", stderr);
fputs("--fuzz-mode if you wish to fuzz this application safely\n", stderr);
exit(EXIT_SUCCESS);
}
else
{
fputs("Unknown option:", stderr);
fputs(argv[i], stderr);
fputs("\nAborting to avoid problems\n", stderr);
exit(EXIT_FAILURE);
}
}
if(NULL != name) source = fopen(name, "r");
else source = stdin;
if(source == NULL)
{
fputs("File ", stderr);
fputs(name, stderr);
fputs(" not found!\n", stderr);
return 1;
}
if(NULL != dest) destination = fopen(dest, "w");
else destination = stdout;
if(FUZZING) destination = fopen("/dev/null", "w");
global = calloc(1, sizeof(struct CLzmaDec));
global->readBuf = calloc(sizeof_readBuf, sizeof(uint8_t));
global->readCur = global->readBuf;
global->readEnd = global->readBuf;
global->allocCapacity = 0;
global->dicSize = 0;
res = DecompressXzOrLzma();
free(global->dicf); /* Pacify valgrind(1). */
free(global->readBuf);
free(global);
return res;
}
/* Copyright (C) 2003, 2007 Rob Landley <rob@landley.net>
* Copyright (C) 2022 Paul Dersey <pdersey@gmail.com>
* This file is part of mescc-tools-extra
*
* mescc-tools-extra is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* mescc-tools-extra is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with mescc-tools-extra. If not, see <http://www.gnu.org/licenses/>.
*/
/* bzcat.c - bzip2 decompression
*
* Copyright 2003, 2007 Rob Landley <rob@landley.net>
*
* Based on a close reading (but not the actual code) of the original bzip2
* decompression code by Julian R Seward (jseward@acm.org), which also
* acknowledges contributions by Mike Burrows, David Wheeler, Peter Fenwick,
* Alistair Moffat, Radford Neal, Ian H. Witten, Robert Sedgewick, and
* Jon L. Bentley.
*
* No standard.
*/
/********************************************************************************
* unbz2.c is a bz2 file decompression utility based on bzcat.c with *
* modifications to enable being built by M2-Planet with M2libc. *
********************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include "bootstrappable.c"
// Constants for huffman coding
#define MAX_GROUPS 6
#define GROUP_SIZE 50 /* 64 would have been more efficient */
#define MAX_HUFCODE_BITS 20 /* Longest huffman code allowed */
#define MAX_SYMBOLS 258 /* 256 literals + RUNA + RUNB */
#define SYMBOL_RUNA 0
#define SYMBOL_RUNB 1
// Other housekeeping constants
#define IOBUF_SIZE 4096
// Status return values
#define RETVAL_LAST_BLOCK (-100)
#define RETVAL_NOT_BZIP_DATA (-1)
#define RETVAL_DATA_ERROR (-2)
#define RETVAL_OBSOLETE_INPUT (-3)
#define INT_MAX 2147483647
// This is what we know about each huffman coding group
struct group_data
{
int *limit;
int *base;
int *permute;
char minLen;
char maxLen;
};
// Data for burrows wheeler transform
struct bwdata
{
unsigned origPtr;
int *byteCount;
// State saved when interrupting output
int writePos;
int writeRun;
int writeCount;
int writeCurrent;
unsigned dataCRC;
unsigned headerCRC;
unsigned *dbuf;
};
// Structure holding all the housekeeping data, including IO buffers and
// memory that persists between calls to bunzip
struct bunzip_data
{
// Input stream, input buffer, input bit buffer
int in_fd;
int inbufCount;
int inbufPos;
char *inbuf;
unsigned inbufBitCount;
unsigned inbufBits;
// Output buffer
char *outbuf;
int outbufPos;
unsigned totalCRC;
// First pass decompression data (Huffman and MTF decoding)
char *selectors; // nSelectors=15 bits
struct group_data *groups; // huffman coding tables
int symTotal;
int groupCount;
int nSelectors;
unsigned *symToByte;
unsigned *mtfSymbol;
// The CRC values stored in the block header and calculated from the data
unsigned *crc32Table;
// Second pass decompression data (burrows-wheeler transform)
unsigned dbufSize;
struct bwdata* bwdata;
};
int FUZZING;
void crc_init(unsigned *crc_table, int little_endian)
{
unsigned i;
unsigned j;
unsigned c;
// Init the CRC32 table (big endian)
for(i = 0; i < 256; i += 1)
{
if(little_endian)
{
c = i;
}
else
{
c = i << 24;
}
for(j = 8; j > 0; j -= 1)
{
if(little_endian)
{
if(c & 1)
{
c = (c >> 1) ^ 0xEDB88320;
}
else
{
c = c >> 1;
}
}
else
{
if(c & 0x80000000)
{
c = (c << 1) ^ 0x04C11DB7;
#if defined(__M2__)
// & 0xFFFFFFFF not working
if(sizeof(unsigned) == 8)
{
c <<= 32;
c >>= 32;
}
#endif
}
else
{
c = c << 1;
}
}
}
crc_table[i] = c;
}
}
// Return the next nnn bits of input. All reads from the compressed input
// are done through this function. All reads are big endian.
unsigned get_bits(struct bunzip_data *bd, char bits_wanted)
{
unsigned bits = 0;
// If we need to get more data from the byte buffer, do so. (Loop getting
// one byte at a time to enforce endianness and avoid unaligned access.)
while(bd->inbufBitCount < bits_wanted)
{
// If we need to read more data from file into byte buffer, do so
if(bd->inbufPos == bd->inbufCount)
{
if(0 >= (bd->inbufCount = read(bd->in_fd, bd->inbuf, IOBUF_SIZE)))
{
exit(1);
}
bd->inbufPos = 0;
}
// Avoid 32-bit overflow (dump bit buffer to top of output)
if(bd->inbufBitCount >= 24)
{
bits = bd->inbufBits & ((1 << bd->inbufBitCount) - 1);
bits_wanted = bits_wanted - bd->inbufBitCount;
bits = bits << bits_wanted;
bd->inbufBitCount = 0;
}
// Grab next 8 bits of input from buffer.
bd->inbufBits = (bd->inbufBits << 8) | (bd->inbuf[bd->inbufPos] & 0xFF);
bd->inbufPos = bd->inbufPos + 1;
bd->inbufBitCount = bd->inbufBitCount + 8;
}
// Calculate result
bd->inbufBitCount = bd->inbufBitCount - bits_wanted;
bits = bits | ((bd->inbufBits >> bd->inbufBitCount) & ((1 << bits_wanted) - 1));
return bits;
}
/* Read block header at start of a new compressed data block. Consists of:
*
* 48 bits : Block signature, either pi (data block) or e (EOF block).
* 32 bits : bw->headerCRC
* 1 bit : obsolete feature flag.
* 24 bits : origPtr (Burrows-wheeler unwind index, only 20 bits ever used)
* 16 bits : Mapping table index.
*[16 bits]: symToByte[symTotal] (Mapping table. For each bit set in mapping
* table index above, read another 16 bits of mapping table data.
* If correspondig bit is unset, all bits in that mapping table
* section are 0.)
* 3 bits : groupCount (how many huffman tables used to encode, anywhere
* from 2 to MAX_GROUPS)
* variable: hufGroup[groupCount] (MTF encoded huffman table data.)
*/
int read_block_header(struct bunzip_data *bd, struct bwdata *bw)
{
struct group_data *hufGroup;
int hh;
int ii;
int jj;
int kk;
int symCount;
int *base;
int *limit;
unsigned uc;
unsigned *length = calloc(MAX_SYMBOLS, sizeof(unsigned));
unsigned *temp = calloc(MAX_HUFCODE_BITS + 1, sizeof(unsigned));
size_t minLen;
size_t maxLen;
int pp;
#if defined(__M2__)
int int_array = sizeof(int);
int group_data_array = sizeof(struct group_data);
#else
int int_array = 1;
int group_data_array = 1;
#endif
size_t hold;
// Read in header signature and CRC (which is stored big endian)
ii = get_bits(bd, 24);
jj = get_bits(bd, 24);
bw->headerCRC = get_bits(bd, 32);
// Is this the EOF block with CRC for whole file? (Constant is "e")
if(ii == 0x177245 && jj == 0x385090)
{
free(length);
free(temp);
return RETVAL_LAST_BLOCK;
}
// Is this a valid data block? (Constant is "pi".)
if(ii != 0x314159 || jj != 0x265359)
{
return RETVAL_NOT_BZIP_DATA;
}
// We can add support for blockRandomised if anybody complains.
if(get_bits(bd, 1))
{
return RETVAL_OBSOLETE_INPUT;
}
if((bw->origPtr = get_bits(bd, 24)) > bd->dbufSize)
{
return RETVAL_DATA_ERROR;
}
// mapping table: if some byte values are never used (encoding things
// like ascii text), the compression code removes the gaps to have fewer
// symbols to deal with, and writes a sparse bitfield indicating which
// values were present. We make a translation table to convert the symbols
// back to the corresponding bytes.
hh = get_bits(bd, 16);
bd->symTotal = 0;
for(ii = 0; ii < 16; ii += 1)
{
if(hh & (1 << (15 - ii)))
{
kk = get_bits(bd, 16);
for(jj = 0; jj < 16; jj += 1)
{
if(kk & (1 << (15 - jj)))
{
bd->symToByte[bd->symTotal] = (16 * ii) + jj;
bd->symTotal += 1;
}
}
}
}
// How many different huffman coding groups does this block use?
bd->groupCount = get_bits(bd, 3);
if(bd->groupCount < 2 || bd->groupCount > MAX_GROUPS)
{
return RETVAL_DATA_ERROR;
}
// nSelectors: Every GROUP_SIZE many symbols we switch huffman coding
// tables. Each group has a selector, which is an index into the huffman
// coding table arrays.
//
// Read in the group selector array, which is stored as MTF encoded
// bit runs. (MTF = Move To Front. Every time a symbol occurs its moved
// to the front of the table, so it has a shorter encoding next time.)
if(!(bd->nSelectors = get_bits(bd, 15)))
{
return RETVAL_DATA_ERROR;
}
for(ii = 0; ii < bd->groupCount; ii += 1)
{
bd->mtfSymbol[ii] = ii;
}
for(ii = 0; ii < bd->nSelectors; ii += 1)
{
// Get next value
for(jj = 0; get_bits(bd, 1); jj += 1)
if(jj >= bd->groupCount)
{
return RETVAL_DATA_ERROR;
}
// Decode MTF to get the next selector, and move it to the front.
uc = bd->mtfSymbol[jj];
while(jj)
{
jj = jj - 1;
bd->mtfSymbol[jj + 1] = bd->mtfSymbol[jj];
}
bd->mtfSymbol[0] = bd->selectors[ii] = uc;
}
// Read the huffman coding tables for each group, which code for symTotal
// literal symbols, plus two run symbols (RUNA, RUNB)
symCount = bd->symTotal + 2;
for(jj = 0; jj < bd->groupCount; jj += 1)
{
// Read lengths
hh = get_bits(bd, 5);
for(ii = 0; ii < symCount; ii += 1)
{
while(TRUE)
{
// !hh || hh > MAX_HUFCODE_BITS in one test.
if(MAX_HUFCODE_BITS - 1 < hh - 1)
{
return RETVAL_DATA_ERROR;
}
// Grab 2 bits instead of 1 (slightly smaller/faster). Stop if
// first bit is 0, otherwise second bit says whether to
// increment or decrement.
kk = get_bits(bd, 2);
if(kk & 2)
{
hh += (1 - ((kk & 1) << 1));
}
else
{
bd->inbufBitCount += 1;
break;
}
}
length[ii] = hh;
}
// Find largest and smallest lengths in this group
minLen = maxLen = length[0];
for(ii = 1; ii < symCount; ii += 1)
{
hold = length[ii];
if(hold > maxLen)
{
maxLen = hold;
}
else if(hold < minLen)
{
minLen = hold;
}
}
/* Calculate permute[], base[], and limit[] tables from length[].
*
* permute[] is the lookup table for converting huffman coded symbols
* into decoded symbols. It contains symbol values sorted by length.
*
* base[] is the amount to subtract from the value of a huffman symbol
* of a given length when using permute[].
*
* limit[] indicates the largest numerical value a symbol with a given
* number of bits can have. It lets us know when to stop reading.
*
* To use these, keep reading bits until value <= limit[bitcount] or
* youve read over 20 bits (error). Then the decoded symbol
* equals permute[hufcode_value - base[hufcode_bitcount]].
*/
hufGroup = bd->groups + (group_data_array * jj);
require(minLen > 0, "hufGroup minLen can't have negative values\n");
require(minLen <= MAX_HUFCODE_BITS, "hufGroup minLen can't exceed MAX_HUFCODE_BITS\n");
hufGroup->minLen = minLen;
require(maxLen > 0, "hufGroup maxLen can't have negative values\n");
require(maxLen <= MAX_HUFCODE_BITS, "hufGroup maxLen can't exceed MAX_HUFCODE_BITS\n");
hufGroup->maxLen = maxLen;
// Note that minLen cant be smaller than 1, so we adjust the base
// and limit array pointers so were not always wasting the first
// entry. We do this again when using them (during symbol decoding).
base = hufGroup->base - (int_array * 1);
require(0 <= base, "can't have a negative hufGroup->base\n");
limit = hufGroup->limit - (int_array * 1);
// zero temp[] and limit[], and calculate permute[]
pp = 0;
for(ii = minLen; ii <= maxLen; ii += 1)
{
require(MAX_HUFCODE_BITS >= ii, "Invalid HUFCODE_BITS length\n");
temp[ii] = 0;
limit[ii] = 0;
for(hh = 0; hh < symCount; hh += 1)
{
if(length[hh] == ii)
{
require(MAX_SYMBOLS >= pp, "pp exceeded MAX_SYMBOLS\n");
hufGroup->permute[pp] = hh;
pp += 1;
}
}
}
// Count symbols coded for at each bit length
for(ii = 0; ii < symCount; ii += 1)
{
hold = length[ii];
require(MAX_HUFCODE_BITS >= hold, "Invalid HUFCODE_BITS length\n");
temp[hold] += 1;
}
/* Calculate limit[] (the largest symbol-coding value at each bit
* length, which is (previous limit<<1)+symbols at this level), and
* base[] (number of symbols to ignore at each bit length, which is
* limit minus the cumulative count of symbols coded for already). */
pp = hh = 0;
for(ii = minLen; ii < maxLen; ii += 1)
{
pp += temp[ii];
limit[ii] = pp - 1;
pp = pp << 1;
hh += temp[ii];
base[ii + 1] = pp - hh;
}
limit[maxLen] = pp + temp[maxLen] - 1;
limit[maxLen + 1] = INT_MAX;
base[minLen] = 0;
}
free(length);
free(temp);
return 0;
}
/* First pass, read blocks symbols into dbuf[dbufCount].
*
* This undoes three types of compression: huffman coding, run length encoding,
* and move to front encoding. We have to undo all those to know when weve
* read enough input.
*/
int read_huffman_data(struct bunzip_data *bd, struct bwdata *bw)
{
struct group_data *hufGroup;
int ii;
int jj;
int kk;
int runPos;
int dbufCount;
int symCount;
int selector;
int nextSym;
int *byteCount;
int *base;
int *limit;
unsigned hh;
unsigned *dbuf = bw->dbuf;
unsigned uc;
#if defined(__M2__)
int int_array = sizeof(int);
int group_data_array = sizeof(struct group_data);
#else
int int_array = 1;
int group_data_array = 1;
#endif
// Weve finished reading and digesting the block header. Now read this
// blocks huffman coded symbols from the file and undo the huffman coding
// and run length encoding, saving the result into dbuf[dbufCount++] = uc
// Initialize symbol occurrence counters and symbol mtf table
byteCount = bw->byteCount;
for(ii = 0; ii < 256; ii += 1)
{
byteCount[ii] = 0;
bd->mtfSymbol[ii] = ii;
}
// Loop through compressed symbols. This is the first "tight inner loop"
// that needs to be micro-optimized for speed. (This one fills out dbuf[]
// linearly, staying in cache more, so isnt as limited by DRAM access.)
runPos = 0;
dbufCount = 0;
symCount = 0;
selector = 0;
// Some unnecessary initializations to shut gcc up.
base = 0;
limit = 0;
hufGroup = 0;
hh = 0;
while(TRUE)
{
// Have we reached the end of this huffman group?
if(!(symCount))
{
// Determine which huffman coding group to use.
symCount = GROUP_SIZE - 1;
if(selector >= bd->nSelectors)
{
return RETVAL_DATA_ERROR;
}
hufGroup = bd->groups + (group_data_array * bd->selectors[selector]);
selector += 1;
base = hufGroup->base - (int_array * 1);
require(0 <= base, "can't have negative hufGroup->base\n");
limit = hufGroup->limit - (int_array * 1);
}
else
{
symCount -= 1;
}
// Read next huffman-coded symbol (into jj).
ii = hufGroup->minLen;
jj = get_bits(bd, ii);
while(jj > limit[ii])
{
// if (ii > hufGroup->maxLen) return RETVAL_DATA_ERROR;
ii += 1;
// Unroll get_bits() to avoid a function call when the datas in
// the buffer already.
if(bd->inbufBitCount)
{
bd->inbufBitCount -= 1;
kk = (bd->inbufBits >> bd->inbufBitCount) & 1;
}
else
{
kk = get_bits(bd, 1);
}
jj = (jj << 1) | kk;
}
// Huffman decode jj into nextSym (with bounds checking)
jj -= base[ii];
if(ii > hufGroup->maxLen || jj >= MAX_SYMBOLS)
{
return RETVAL_DATA_ERROR;
}
nextSym = hufGroup->permute[jj];
// If this is a repeated run, loop collecting data
if(nextSym <= SYMBOL_RUNB)
{
// If this is the start of a new run, zero out counter
if(!runPos)
{
runPos = 1;
hh = 0;
}
/* Neat trick that saves 1 symbol: instead of or-ing 0 or 1 at
each bit position, add 1 or 2 instead. For example,
1011 is 1<<0 + 1<<1 + 2<<2. 1010 is 2<<0 + 2<<1 + 1<<2.
You can make any bit pattern that way using 1 less symbol than
the basic or 0/1 method (except all bits 0, which would use no
symbols, but a run of length 0 doesnt mean anything in this
context). Thus space is saved. */
hh += (runPos << nextSym); // +runPos if RUNA; +2*runPos if RUNB
runPos = runPos << 1;
continue;
}
/* When we hit the first non-run symbol after a run, we now know
how many times to repeat the last literal, so append that many
copies to our buffer of decoded symbols (dbuf) now. (The last
literal used is the one at the head of the mtfSymbol array.) */
if(runPos)
{
runPos = 0;
// Check for integer overflow
if(hh > bd->dbufSize || dbufCount + hh > bd->dbufSize)
{
return RETVAL_DATA_ERROR;
}
uc = bd->symToByte[bd->mtfSymbol[0]];
byteCount[uc] += hh;
while(hh)
{
hh -= 1;
dbuf[dbufCount] = uc;
dbufCount += 1;
}
}
// Is this the terminating symbol?
if(nextSym > bd->symTotal)
{
break;
}
/* At this point, the symbol we just decoded indicates a new literal
character. Subtract one to get the position in the MTF array
at which this literal is currently to be found. (Note that the
result cant be -1 or 0, because 0 and 1 are RUNA and RUNB.
Another instance of the first symbol in the mtf array, position 0,
would have been handled as part of a run.) */
if(dbufCount >= bd->dbufSize)
{
return RETVAL_DATA_ERROR;
}
ii = nextSym - 1;
uc = bd->mtfSymbol[ii];
// On my laptop, unrolling this memmove() into a loop shaves 3.5% off
// the total running time.
while(ii)
{
ii -= 1;
bd->mtfSymbol[ii + 1] = bd->mtfSymbol[ii];
}
bd->mtfSymbol[0] = uc;
uc = bd->symToByte[uc];
// We have our literal byte. Save it into dbuf.
byteCount[uc] += 1;
dbuf[dbufCount] = uc;
dbufCount += 1;
}
// Now we know what dbufCount is, do a better sanity check on origPtr.
if(bw->origPtr >= (bw->writeCount = dbufCount))
{
return RETVAL_DATA_ERROR;
}
return 0;
}
// Flush output buffer to disk
void flush_bunzip_outbuf(struct bunzip_data *bd, int out_fd)
{
if(bd->outbufPos)
{
if(write(out_fd, bd->outbuf, bd->outbufPos) != bd->outbufPos)
{
exit(1);
}
bd->outbufPos = 0;
}
}
void burrows_wheeler_prep(struct bunzip_data *bd, struct bwdata *bw)
{
int ii;
int jj;
int kk;
unsigned *dbuf = bw->dbuf;
int *byteCount = bw->byteCount;
unsigned uc;
// Turn byteCount into cumulative occurrence counts of 0 to n-1.
jj = 0;
for(ii = 0; ii < 256; ii += 1)
{
kk = jj + byteCount[ii];
byteCount[ii] = jj;
jj = kk;
}
// Use occurrence counts to quickly figure out what order dbuf would be in
// if we sorted it.
for(ii = 0; ii < bw->writeCount; ii += 1)
{
uc = dbuf[ii] & 0xFF;
dbuf[byteCount[uc]] = dbuf[byteCount[uc]] | (ii << 8);
byteCount[uc] += 1;
}
// blockRandomised support would go here.
// Using ii as position, jj as previous character, hh as current character,
// and uc as run count.
bw->dataCRC = 0xffffffff;
/* Decode first byte by hand to initialize "previous" byte. Note that it
doesnt get output, and if the first three characters are identical
it doesnt qualify as a run (hence uc=255, which will either wrap
to 1 or get reset). */
if(bw->writeCount)
{
bw->writePos = dbuf[bw->origPtr];
bw->writeCurrent = bw->writePos;
bw->writePos = bw->writePos >> 8;
bw->writeRun = -1;
}
}
// Decompress a block of text to intermediate buffer
int read_bunzip_data(struct bunzip_data *bd)
{
int rc = read_block_header(bd, bd->bwdata);
if(!rc)
{
rc = read_huffman_data(bd, bd->bwdata);
}
// First thing that can be done by a background thread.
burrows_wheeler_prep(bd, bd->bwdata);
return rc;
}
// Undo burrows-wheeler transform on intermediate buffer to produce output.
// If !len, write up to len bytes of data to buf. Otherwise write to out_fd.
// Returns len ? bytes written : 0. Notice all errors are negative #s.
//
// Burrows-wheeler transform is described at:
// http://dogma.net/markn/articles/bwt/bwt.htm
// http://marknelson.us/1996/09/01/bwt/
int write_bunzip_data(struct bunzip_data *bd, struct bwdata *bw,
int out_fd, char *outbuf, int len)
{
unsigned *dbuf = bw->dbuf;
int count;
int pos;
int current;
int run;
int copies;
int outbyte;
int previous;
int gotcount = 0;
int i;
int crc_index;
while(TRUE)
{
// If last read was short due to end of file, return last block now
if(bw->writeCount < 0)
{
return bw->writeCount;
}
// If we need to refill dbuf, do it.
if(!bw->writeCount)
{
i = read_bunzip_data(bd);
if(i)
{
if(i == RETVAL_LAST_BLOCK)
{
bw->writeCount = i;
return gotcount;
}
else
{
return i;
}
}
}
// loop generating output
count = bw->writeCount;
pos = bw->writePos;
current = bw->writeCurrent;
run = bw->writeRun;
while(count)
{
// If somebody (like tar) wants a certain number of bytes of
// data from memory instead of written to a file, humor them.
if(len && bd->outbufPos >= len)
{
goto dataus_interruptus;
}
count -= 1;
// Follow sequence vector to undo Burrows-Wheeler transform.
previous = current;
pos = dbuf[pos];
current = pos & 0xff;
pos = pos >> 8;
// Whenever we see 3 consecutive copies of the same byte,
// the 4th is a repeat count
if(run == 3)
{
run += 1;
copies = current;
outbyte = previous;
current = -1;
}
else
{
run += 1;
copies = 1;
outbyte = current;
}
// Output bytes to buffer, flushing to file if necessary
while(copies)
{
copies -= 1;
if(bd->outbufPos == IOBUF_SIZE)
{
flush_bunzip_outbuf(bd, out_fd);
}
bd->outbuf[bd->outbufPos] = outbyte;
bd->outbufPos += 1;
crc_index = ((bw->dataCRC >> 24) ^ outbyte) & 0xFF;
bw->dataCRC = (bw->dataCRC << 8) ^ bd->crc32Table[crc_index];
}
if(current != previous)
{
run = 0;
}
}
// decompression of this block completed successfully
bw->dataCRC = ~(bw->dataCRC);
#if defined(__M2__)
// & 0xFFFFFFFF not working
if(sizeof(unsigned) == 8)
{
bw->dataCRC <<= 32;
bw->dataCRC >>= 32;
}
#endif
bd->totalCRC = ((bd->totalCRC << 1) | (bd->totalCRC >> 31)) ^ bw->dataCRC;
// if this block had a crc error, force file level crc error.
if(bw->dataCRC != bw->headerCRC)
{
bd->totalCRC = bw->headerCRC + 1;
return RETVAL_LAST_BLOCK;
}
dataus_interruptus:
bw->writeCount = count;
if(len)
{
gotcount += bd->outbufPos;
memcpy(outbuf, bd->outbuf, len);
// If we got enough data, checkpoint loop state and return
len -= bd->outbufPos;
if(len < 1)
{
bd->outbufPos -= len;
if(bd->outbufPos)
{
memmove(bd->outbuf, bd->outbuf + len, bd->outbufPos);
}
bw->writePos = pos;
bw->writeCurrent = current;
bw->writeRun = run;
return gotcount;
}
}
}
}
// Allocate the structure, read file header. If !len, src_fd contains
// filehandle to read from. Else inbuf contains data.
int start_bunzip(struct bunzip_data **bdp, int src_fd)
{
struct bunzip_data *bd;
unsigned i;
// Figure out how much data to allocate.
i = sizeof(struct bunzip_data);
// Allocate bunzip_data. Most fields initialize to zero.
*bdp = malloc(i);
bd = *bdp;
memset(bd, 0, i);
bd->inbuf = calloc(IOBUF_SIZE, sizeof(char));
bd->outbuf = calloc(IOBUF_SIZE, sizeof(char));
bd->selectors = calloc(32768, sizeof(char));
bd->groups = calloc(MAX_GROUPS, sizeof(struct group_data));
for(i = 0; i < MAX_GROUPS; i += 1)
{
bd->groups[i].limit = calloc(MAX_HUFCODE_BITS + 1, sizeof(int));
bd->groups[i].base = calloc(MAX_HUFCODE_BITS, sizeof(int));
bd->groups[i].permute = calloc(MAX_SYMBOLS, sizeof(int));
}
bd->symToByte = calloc(256, sizeof(unsigned));
bd->mtfSymbol = calloc(256, sizeof(unsigned));
bd->crc32Table = calloc(256, sizeof(unsigned));
bd->bwdata = calloc(1, sizeof(struct bwdata));
bd->bwdata->byteCount = calloc(256, sizeof(int));
unsigned *crc32Table;
bd->in_fd = src_fd;
crc_init(bd->crc32Table, 0);
// Ensure that file starts with "BZh".
char *header = "BZh";
for(i = 0; i < 3; i += 1) if(get_bits(bd, 8) != header[i])
{
return RETVAL_NOT_BZIP_DATA;
}
// Next byte ascii 1-9, indicates block size in units of 100k of
// uncompressed data. Allocate intermediate buffer for block.
i = get_bits(bd, 8);
if(i < 49 || i > 57)
{
return RETVAL_NOT_BZIP_DATA;
}
bd->dbufSize = 100000 * (i - 48);
bd->bwdata[0].dbuf = malloc(bd->dbufSize * sizeof(int));
return 0;
}
// Example usage: decompress src_fd to dst_fd. (Stops at end of bzip data,
// not end of file.)
int bunzipStream(int src_fd, int dst_fd)
{
struct bunzip_data *bd;
int i;
int j;
if(!(i = start_bunzip(&bd, src_fd)))
{
i = write_bunzip_data(bd, bd->bwdata, dst_fd, 0, 0);
if(i == RETVAL_LAST_BLOCK)
{
if(bd->bwdata[0].headerCRC == bd->totalCRC)
{
i = 0;
}
else
{
i = RETVAL_DATA_ERROR;
}
}
}
flush_bunzip_outbuf(bd, dst_fd);
free(bd->bwdata[0].dbuf);
free(bd->inbuf);
free(bd->outbuf);
free(bd->selectors);
for(j = 0; j < MAX_GROUPS; j += 1)
{
free(bd->groups[j].limit);
free(bd->groups[j].base);
free(bd->groups[j].permute);
}
free(bd->groups);
free(bd->symToByte);
free(bd->mtfSymbol);
free(bd->crc32Table);
free(bd->bwdata->byteCount);
free(bd->bwdata);
free(bd);
return -i;
}
void do_bunzip2(int in_fd, int out_fd)
{
int err = bunzipStream(in_fd, out_fd);
if(err)
{
exit(1);
}
}
int main(int argc, char **argv)
{
char *name = NULL;
char *dest = NULL;
FUZZING = FALSE;
/* process arguments */
int i = 1;
while(i < argc)
{
if(NULL == argv[i])
{
i += 1;
}
else if(match(argv[i], "-f") || match(argv[i], "--file"))
{
name = argv[i + 1];
require(NULL != name, "the --file option requires a filename to be given\n");
i += 2;
}
else if(match(argv[i], "-o") || match(argv[i], "--output"))
{
dest = argv[i + 1];
require(NULL != dest, "the --output option requires a filename to be given\n");
i += 2;
}
else if(match(argv[i], "--fuzzing-mode"))
{
FUZZING = TRUE;
i += 1;
}
else if(match(argv[i], "-h") || match(argv[i], "--help"))
{
fputs("Usage: ", stderr);
fputs(argv[0], stderr);
fputs(" --file $input.bz2", stderr);
fputs(" --output $output\n", stderr);
fputs("--help to get this message\n", stderr);
exit(EXIT_SUCCESS);
}
else
{
fputs("Unknown option:", stderr);
fputs(argv[i], stderr);
fputs("\nAborting to avoid problems\n", stderr);
exit(EXIT_FAILURE);
}
}
/* Deal with no input */
if(NULL == name)
{
fputs("an input file (--file $name) must be provided\n", stderr);
exit(EXIT_FAILURE);
}
int in_fd = open(name, 0, 0);
if(in_fd < 0)
{
fputs("Unable to open input file\n", stderr);
exit(EXIT_FAILURE);
}
/* If an output name isn't provided */
if(NULL == dest)
{
int length = strlen(name);
require(length > 4, "file name length not sufficient, please provide output name with --output $filename\n");
/* Assume they want the output file name to be the input file name minus the .bz2 */
dest = calloc(length, sizeof(char));
require(NULL != dest, "Failed to allocate new output file name\n");
/* do name.bz2 => name */
strcpy(dest, name);
dest[length-3] = 0;
}
int out_fd;
if(FUZZING)
{
/* Dump to /dev/null the garbage data produced during fuzzing */
out_fd = open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0600);
}
else
{
out_fd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, 0600);
}
if(out_fd < 0)
{
fputs("Unable to open output file for writing\n", stderr);
exit(EXIT_FAILURE);
}
do_bunzip2(in_fd, out_fd);
close(in_fd);
close(out_fd);
exit(0);
}
#!/bin/sh # SPDX-FileCopyrightText: 2021 Andrius Å tikonas <andrius@stikonas.eu> # SPDX-FileCopyrightText: 2021 Paul Dersey <pdersey@gmail.com> # SPDX-FileCopyrightText: 2020-2022 Samuel Tyler <samuel@samuelt.me> # SPDX-FileCopyrightText: 2022 Dor Askayo <dor.askayo@gmail.com> # # SPDX-License-Identifier: GPL-3.0-or-later set -ex PATH=/usr/bin catm seed-full.kaem /steps/bootstrap.cfg /steps/env seed.kaem kaem --file seed-full.kaem
ARCH=x86 ARCH_DIR=/x86 FORCE_TIMESTAMPS=False CHROOT=True UPDATE_CHECKSUMS=False JOBS=1 SWAP_SIZE=0 FINAL_JOBS=1 INTERNAL_CI=False INTERACTIVE=False BARE_METAL=False DISK=sda1 KERNEL_BOOTSTRAP=False BUILD_KERNELS=False CONFIGURATOR=False MIRRORS=file:// MIRRORS_LEN=1
# SPDX-FileCopyrightText: 2023 Samuel Tyler <samuel@samuelt.me>
#
# SPDX-License-Identifier: GPL-3.0-or-later
DISTFILES=/external/distfiles
PREFIX=/usr
BINDIR=${PREFIX}/bin
LIBDIR=${PREFIX}/lib/mes
INCDIR=${PREFIX}/include/mes
SRCDIR=/steps
TMPDIR=/tmp
#!/bin/sh
# SPDX-FileCopyrightText: 2021 Andrius Å tikonas <andrius@stikonas.eu>
# SPDX-FileCopyrightText: 2021 Paul Dersey <pdersey@gmail.com>
# SPDX-FileCopyrightText: 2020-2022 Samuel Tyler <samuel@samuelt.me>
# SPDX-FileCopyrightText: 2022 Dor Askayo <dor.askayo@gmail.com>
#
# SPDX-License-Identifier: GPL-3.0-or-later
set -ex
# mes envars
MES_PKG=mes-0.27.1
tcc_cc -o /tmp/configurator.sl /src/stdlib.c /src/configurator.c
stack_c -i /x86/stack_c_intro.M1 /tmp/configurator.sl -o tmp/configurator.M1
blood-elf --file tmp/configurator.M1 --little-endian --output /tmp/configurator.blood_elf
M1 /tmp/configurator.M1 -o /tmp/configurator.macro
hex2 -o /tmp/configurator /x86/ELF-x86-debug.hex2 /tmp/configurator.macro /tmp/configurator.blood_elf
# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
sha256sum -o configurator.${ARCH}.checksums /tmp/configurator
else
sha256sum -c configurator.${ARCH}.checksums
fi
/tmp/configurator /steps/configurator
tcc_cc -o /tmp/script-generator.sl /src/stdlib.c /src/script-generator.c
stack_c -i /x86/stack_c_intro.M1 /tmp/script-generator.sl -o tmp/script-generator.M1
blood-elf --file tmp/script-generator.M1 --little-endian --output /tmp/script-generator.blood_elf
M1 /tmp/script-generator.M1 -o /tmp/script-generator.macro
hex2 -o /tmp/script-generator /x86/ELF-x86-debug.hex2 /tmp/script-generator.macro /tmp/script-generator.blood_elf
# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
sha256sum -o script-generator.${ARCH}.checksums /tmp/script-generator
else
sha256sum -c script-generator.${ARCH}.checksums
fi
/tmp/script-generator /steps/manifest
kaem --file /steps/0.sh
/*
* SPDX-FileCopyrightText: 2024 Samuel Tyler <samuel@samuelt.me>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#define MAX_STRING 2048
#define MAX_SHORT 512
#define MAX_ID 128
#define MAX_VAR 128
#include <bootstrappable.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/utsname.h>
#define TRUE 1
#define FALSE 0
#define KIND_NONE 0
#define KIND_MENU 1
#define KIND_OPTION 2
#define TYPE_NONE 0
#define TYPE_BOOL 1
#define TYPE_SIZE 2
#define TYPE_STRING 3
#define TYPE_INT 4
struct Entry {
int kind; // either menu or option
char *env_var; // name of the environment variable this option is stored in
char *id; // the id of the configuration item
char *short_desc; // short description of the config
char *full_desc; // extended description of the config
int type; // the type of the configuration option
char *validation; // any validation rules
char *val;
char *default_val;
struct Entry *children; // submenus
struct Entry *parent;
struct Entry *next;
};
typedef struct Entry Entry;
Entry *find_entry(Entry *head, char *id) {
char *component = strchr(id, '/');
if (component == NULL) {
component = id + strlen(id);
}
Entry *current;
Entry *final;
int len;
while (1) {
len = component - id;
current = head;
while (current != NULL) {
/* ensure that the id isn't just a substring of the component but actually is the component */
if (strlen(current->id) == len && strncmp(id, current->id, len) == 0) {
/* Found it! */
final = current;
head = current->children;
break;
}
current = current->next;
}
if (current == NULL) {
/* Did not find it */
return NULL;
}
if (component[0] == '\0') {
break;
}
component += 1;
component = strchr(component, '/');
if (component == NULL) {
component = id + strlen(id);
}
}
return final;
}
Entry *get_parent(Entry *head, char *id) {
char *parent_id = calloc(MAX_ID, sizeof(char));
strcpy(parent_id, id);
char *final_slash = strrchr(parent_id, '/');
final_slash[0] = '\0';
Entry *ret = find_entry(head, parent_id);
free(parent_id);
return ret;
}
char read_string(FILE *f, char *out, int length) {
int i = 0;
char c = fgetc(f);
while (c != ' ' && c != '\n' && c != EOF && i < length - 1) {
out[i] = c;
i += 1;
c = fgetc(f);
}
if (i >= length - 1) {
fputs("String too long!\n", stdout);
fclose(f);
exit(1);
}
out[i] = '\0';
return c;
}
int set_val(Entry *entry, char *val) {
if (entry->type == TYPE_BOOL) {
if (strcmp(val, "True") != 0 && strcmp(val, "False") != 0) {
fputs("Invalid input: ", stdout);
fputs(val, stdout);
fputs(" is not a boolean value\n", stdout);
return 1;
}
} else if (entry->type == TYPE_INT) {
int intval = atoi(val);
if (intval == 0 && strcmp(val, "0") != 0) {
fputs("Invalid input: ", stdout);
fputs(val, stdout);
fputs(" is not an integer\n", stdout);
return 1;
}
} else if (entry->type == TYPE_SIZE) {
/* We should have either a K, M, G, T, or no letter, at the end of the size. */
char c = val[strlen(val) - 1];
if (!(('0' <= c && c <= '9') || c == 'K' || c == 'M' || c == 'G' || c == 'T')) {
fputs("Invalid input: ", stdout);
fputc(c, stdout);
fputs(" is not a valid suffix for a size\n", stdout);
return 1;
}
/* Check it is an integer */
char *final_char = val + strlen(val) - 1;
if ('A' <= final_char[0] && final_char[0] <= 'Z') {
final_char[0] = '\0';
}
int intval = atoi(val);
if (intval == 0 && strcmp(val, "0") != 0) {
fputs("Invalid input: ", stdout);
fputs(val, stdout);
fputs(" is not a valid size\n", stdout);
return 1;
}
final_char[0] = c;
} else if (entry->type == TYPE_STRING) {
/* Validation rules. */
char *validation = entry->validation;
char *next;
int found = FALSE;
while (validation != NULL) {
if (validation[0] == '\0') {
found = TRUE;
break;
}
next = strchr(validation, '|');
if (next == NULL) {
if (strcmp(validation, val) == 0) {
found = TRUE;
}
break;
} else {
if (strncmp(validation, val, next - validation) == 0) {
found = TRUE;
}
}
validation = next + 1;
}
if (found == FALSE) {
fputs("Invalid input: ", stdout);
fputs(val, stdout);
fputs(" does not match the validation rules ", stdout);
fputs(entry->validation, stdout);
fputc('\n', stdout);
return 1;
}
}
entry->val = calloc(strlen(val) + 1, sizeof(char));
strcpy(entry->val, val);
return 0;
}
void read_entry(char c, FILE *conf, Entry *head) {
Entry *new = calloc(1, sizeof(Entry));
/* Read the kind */
if (c == 'm') {
new->kind = KIND_MENU;
} else if (c == 'o') {
new->kind = KIND_OPTION;
} else {
fputs("Invalid entry: kind ", stdout);
fputc(c, stdout);
fputc('\n', stdout);
fclose(conf);
exit(1);
}
fgetc(conf);
/* Read the id */
new->id = calloc(MAX_ID, sizeof(char));
c = read_string(conf, new->id, MAX_ID);
if (c != ' ') {
fputs("Invalid entry: no variable\n", stdout);
fclose(conf);
exit(1);
}
/* Read the environment variable */
new->env_var = calloc(MAX_VAR, sizeof(char));
c = read_string(conf, new->env_var, MAX_VAR);
if (c != ' ') {
fputs("Invalid entry: no data type\n", stdout);
fclose(conf);
exit(1);
}
if (strcmp(new->env_var, "_") == 0) {
free(new->env_var);
new->env_var = NULL;
}
/* Read the data type */
char *data_type = calloc(MAX_ID, sizeof(char));
read_string(conf, data_type, MAX_ID);
if (c != ' ') {
fputs("Invalid entry: no default value\n", stdout);
fclose(conf);
exit(1);
}
if (strcmp(data_type, "_") == 0) {
new->type = TYPE_NONE;
} else if (strcmp(data_type, "bool") == 0) {
new->type = TYPE_BOOL;
} else if (strcmp(data_type, "size") == 0) {
new->type = TYPE_SIZE;
} else if (strcmp(data_type, "int") == 0) {
new->type = TYPE_INT;
} else if (data_type[0] == '"') {
new->type = TYPE_STRING;
new->validation = data_type + 1;
char *closing_quote = strrchr(data_type, '"');
closing_quote[0] = '\0';
} else {
fputs("Invalid entry: unknown type: ", stdout);
fputs(data_type, stdout);
fputc('\n', stdout);
fclose(conf);
exit(1);
}
if (new->type != TYPE_STRING) {
free(data_type);
}
/* Read the default value */
char *default_val = calloc(MAX_STRING, sizeof(char));
read_string(conf, default_val, MAX_ID);
if (strcmp(default_val, "_") != 0) {
set_val(new, default_val);
new->default_val = default_val;
} else {
new->default_val = NULL;
}
/* Read the short description */
new->short_desc = calloc(MAX_SHORT, sizeof(char));
int i = 0;
c = fgetc(conf);
while (c != '\n' && c != EOF) {
new->short_desc[i] = c;
c = fgetc(conf);
i += 1;
}
/* Read the long description */
new->full_desc = calloc(MAX_STRING, sizeof(char));
i = 0;
c = fgetc(conf);
char prev = '\0';
while (!(c == '\n' && prev == '\n') && c != EOF) {
new->full_desc[i] = c;
prev = c;
c = fgetc(conf);
i += 1;
}
new->children = NULL;
new->next = NULL;
Entry *parent = get_parent(head, new->id);
new->parent = parent;
if (parent->children == NULL) {
parent->children = new;
} else {
Entry *current = parent->children;
while (current->next != NULL) {
current = current->next;
}
current->next = new;
}
}
Entry *read_config(char *filename) {
FILE *conf = fopen(filename, "r");
if (conf == NULL) {
fputs("Unable to open ", stdout);
fputs(filename, stdout);
fputc('\n', stdout);
exit(0);
}
char c = fgetc(conf);
Entry *head = calloc(1, sizeof(Entry));
head->id = "";
head->env_var = "";
head->next = NULL;
Entry *current = head;
while (c != EOF) {
if (c == '#' || c == '\n') {
/* Skip comments or empty lines. */
while (c != '\n' && c != EOF) {
c = fgetc(conf);
}
} else {
read_entry(c, conf, head);
}
c = fgetc(conf);
}
fclose(conf);
return head;
}
Entry *get_env_var(Entry *head, char *var) {
Entry *ret;
Entry *current;
for (current = head->children; current != NULL; current = current->next) {
if (current->env_var != NULL) {
if (strcmp(current->env_var, var) == 0) {
return current;
}
}
if (current->children != NULL) {
ret = get_env_var(current, var);
if (ret != NULL) {
return ret;
}
}
}
return NULL;
}
int set_cfg_varline(Entry *head, char *line) {
char *var = calloc(strlen(line) + 1, sizeof(char));
strcpy(var, line);
char *val = strchr(var, '=');
val[0] = '\0';
val += 1;
char *newline = strchr(val, '\n');
if (newline != NULL) {
newline[0] = '\0';
}
Entry *entry = get_env_var(head, var);
if (entry != NULL) {
int not_ok = set_val(entry, val);
if (not_ok) {
fputs("^ Originated from ", stdout);
fputs(var, stdout);
fputs("=", stdout);
fputs(val, stdout);
fputs("\n", stdout);
}
}
return entry == NULL;
}
char *set_cfg_values(Entry *head, char **envp) {
int i = 0;
FILE *cfg = fopen("/steps/bootstrap.cfg", "r");
if (cfg == NULL) {
return "";
}
char *extra = calloc(MAX_STRING, sizeof(char));
char *line = calloc(MAX_STRING, sizeof(char));
while (fgets(line, MAX_STRING, cfg) != NULL) {
if (set_cfg_varline(head, line)) {
if (strncmp("CONFIGURATOR=", line, 13) != 0) {
strcat(extra, line);
}
}
free(line);
line = calloc(MAX_STRING, sizeof(char));
}
fclose(cfg);
return extra;
}
void write_cfg_list(Entry *head, FILE *cfg) {
Entry *current;
for (current = head->children; current != NULL; current = current->next) {
if (current->kind == KIND_OPTION && current->val != NULL) {
fputs(current->env_var, cfg);
fputs("=", cfg);
fputs(current->val, cfg);
fputs("\n", cfg);
}
if (current->children != NULL) {
write_cfg_list(current, cfg);
}
}
}
void write_cfg_values(Entry *head, char *extra, int configurator_done) {
FILE *cfg = fopen("/steps/bootstrap.cfg", "w");
if (cfg == NULL) {
fputs("Unable to open /steps/bootstrap.cfg", stderr);
exit(1);
}
if (configurator_done == TRUE) {
fputs("CONFIGURATOR=False\n", cfg);
}
fputs(extra, cfg);
write_cfg_list(head, cfg);
fclose(cfg);
}
void print_short_desc(char *short_desc) {
char *post_markers = strrchr(short_desc, ']');
if (post_markers == NULL) {
post_markers = short_desc;
} else {
post_markers += 1;
while (post_markers[0] == ' ') {
post_markers += 1;
}
}
fputs(post_markers, stdout);
}
void print_recursive_desc(Entry *entry) {
if (entry->parent != NULL) {
if (strcmp(entry->parent->id, "") != 0) {
print_recursive_desc(entry->parent);
fputs("/", stdout);
print_short_desc(entry->short_desc);
return;
}
}
print_short_desc(entry->short_desc);
}
int any_unset(Entry *head);
int check_set(Entry *entry, Entry *head) {
int ret = 0;
if (entry->kind == KIND_OPTION && entry->val == NULL) {
fputs("The configuration option ", stdout);
print_recursive_desc(entry);
fputs(" is unset\n", stdout);
ret = 1;
}
if (entry->children != NULL) {
ret |= any_unset(entry);
}
return ret;
}
int any_unset(Entry *head) {
int ret = 0;
Entry *current;
for (current = head->children; current != NULL; current = current->next) {
ret |= check_set(current, head);
}
return ret;
}
void print_menu(Entry *menu, int is_toplevel) {
if (!is_toplevel) {
fputs("(0) [MENU] Go up\n", stdout);
}
int i = 1;
Entry *current;
for (current = menu->children; current != NULL; current = current->next) {
printf("(%d)", i);
if (current->kind == KIND_MENU) {
fputs("[MENU] ", stdout);
}
fputs(current->short_desc, stdout);
fputc('\n', stdout);
i += 1;
}
}
Entry *get_nth_option(Entry *menu, int n) {
int i = 1;
Entry *current;
for (current = menu->children; current != NULL && i < n; current = current->next) {
i += 1;
}
if (current == NULL) {
printf("There is no option %d!\n", n);
}
return current;
}
void how_to_use(void) {
fputs(
"How to navigate around this configuration menu:\n"
"h or help: at any time, will reprint this help message\n"
"l or list: shows the current menu options\n"
"o <num> or open <num>: open a (sub)menu\n"
"? <num> or describe <num>: provides a more detailed description of an option or menu\n"
"s <num> <val> or set <num> <val>: set the value of an option\n"
"g <num> or get <num>: get the value of an option\n"
"g all or get all: get the value of all options in the menu\n"
"r <num> or reset <num>: reset the value of an option to the default (if there is one)\n"
"e or exit: exits the program\n",
stdout);
}
Entry *extract_num(char **command, Entry *menu) {
command[0] = strchr(command[0], ' ');
if (command[0] == NULL) {
fputs("Expected menu number to operate on!\n", stdout);
}
command[0] += 1;
char *num = command[0];
char *new = strchr(command[0], ' ');
if (new == NULL) {
new = strchr(command[0], '\n');
}
command[0] = new;
command[0][0] = '\0';
command[0] += 1;
/* strtoint does not check if it is not a number */
int i;
for (i = 0; i < strlen(num); i += 1) {
if (!('0' <= num[i] && num[i] <= '9')) {
fputs(num, stdout);
fputs(" is not a menu number!\n", stdout);
return NULL;
}
}
int n = atoi(num);
return get_nth_option(menu, n);
}
Entry *submenu(char *command, Entry *menu, Entry *head) {
command = strchr(command, ' ');
if (strlen(command) < 1) {
fputs("Expected menu number to operate on!\n", stdout);
}
/* 0 is the "go up" menu option */
if (command[1] == '0') {
if (strcmp(menu->id, "") == 0) {
fputs("There is no option 0!\n", stdout);
return menu;
}
return menu->parent;
}
Entry *new = extract_num(&command, menu);
if (new == NULL) {
return menu;
}
if (new->kind != KIND_MENU) {
fputs("This is not a menu!\n", stdout);
return menu;
}
return new;
}
void print_description(char *command, Entry *menu) {
Entry *opt = extract_num(&command, menu);
if (opt != NULL) {
fputs(opt->full_desc, stdout);
}
}
void set_opt_value(char *command, Entry *menu) {
Entry *opt = extract_num(&command, menu);
if (opt == NULL) {
return;
}
if (opt->kind != KIND_OPTION) {
fputs("Cannot set a menu's value!\n", stdout);
return;
}
/* Remove the newline */
char *newline = strchr(command, '\n');
newline[0] = '\0';
set_val(opt, command);
}
void print_opt_value(Entry *opt) {
print_short_desc(opt->short_desc);
fputs(": ", stdout);
if (opt->val == NULL) {
fputs("unset", stdout);
} else {
fputs(opt->val, stdout);
}
fputc('\n', stdout);
}
void get_opt_value(char *command, Entry *menu) {
Entry *opt = extract_num(&command, menu);
if (opt == NULL) {
return;
}
if (opt->kind != KIND_OPTION) {
fputs("Cannot get a menu's value!\n", stdout);
return;
}
print_opt_value(opt);
}
void get_all_values(Entry *menu) {
Entry *current;
for (current = menu->children; current != NULL; current = current->next) {
if (current->kind == KIND_OPTION) {
print_opt_value(current);
}
}
}
void reset_value(char *command, Entry *menu) {
Entry *opt = extract_num(&command, menu);
if (opt == NULL) {
return;
}
if (opt->kind != KIND_OPTION) {
fputs("Cannot reset a menu's value!\n", stdout);
return;
}
opt->val = opt->default_val;
}
void no_input(Entry *head) {
fputs("You don't seem to be running under Fiwix or Linux currently.\n", stdout);
fputs("Likely, you are currently running under builder-hex0.\n", stdout);
fputs("That's ok! We're going to make some assumptions; namely, that you do need\n", stdout);
fputs("the kernel bootstrap, and that you'll get a chance to configure later.\n", stdout);
write_cfg_values(head, "KERNEL_BOOTSTRAP=True\nBUILD_KERNELS=True\n", FALSE);
}
int main(int argc, char **argv) {
char **envp = argv + (argc + 1);
/*
* Check we are being non-interactive and bootstrap.cfg exists in
* which case we do not need to do anything.
*/
char *interactivity = getenv("CONFIGURATOR");
if (interactivity != NULL) {
if (strcmp(interactivity, "False") == 0) {
return 0;
}
}
FILE *bootstrap_cfg = fopen("/steps/bootstrap.cfg", "r");
if (bootstrap_cfg != NULL) {
char *line = calloc(MAX_STRING, sizeof(char));
while (fgets(line, MAX_STRING, bootstrap_cfg) != NULL) {
if (strcmp(line, "CONFIGURATOR=False\n") == 0) {
fclose(bootstrap_cfg);
return 0;
}
free(line);
line = calloc(MAX_STRING, sizeof(char));
}
fclose(bootstrap_cfg);
}
if (argc != 2) {
fputs("Usage: ", stdout);
fputs(argv[0], stdout);
fputs(" <configuration>\n", stdout);
exit(1);
}
Entry *head = read_config(argv[1]);
char *extra = set_cfg_values(head, envp);
/*
* Check if we are NOT running under fiwix or linux.
* If we are not, and need configuration to occur, then we presume that
* we will not be able to get any input from the user.
*/
struct utsname *kernel = calloc(1, sizeof(struct utsname));
uname(kernel);
if (kernel->sysname == NULL) {
no_input(head);
return 0;
} else if (strcmp(kernel->sysname, "Linux") != 0 && strcmp(kernel->sysname, "Fiwix") != 0) {
no_input(head);
return 0;
}
fputs("Welcome to live-bootstrap!\n", stdout);
fputs("We need to do some brief configuration before continuing.\n\n", stdout);
how_to_use();
fputc('\n', stdout);
Entry *menu = head;
print_menu(menu, menu == head);
char *command = calloc(MAX_STRING, sizeof(char));
fputs("\nCommand: ", stdout);
fflush(stdout);
command = fgets(command, MAX_STRING, stdin);
while (command != NULL) {
if (strcmp("h\n", command) == 0 || strcmp("help\n", command) == 0) {
how_to_use();
} else if (strcmp("l\n", command) == 0 || strcmp("list\n", command) == 0) {
print_menu(menu, menu == head);
} else if (strncmp("o ", command, 2) == 0 || strncmp("open ", command, 5) == 0) {
menu = submenu(command, menu, head);
print_menu(menu, menu == head);
} else if (strncmp("? ", command, 2) == 0 || strncmp("describe ", command, 9) == 0) {
print_description(command, menu);
} else if (strcmp("g all\n", command) == 0 || strcmp("get all\n", command) == 0) {
get_all_values(menu);
} else if (strncmp("g ", command, 2) == 0 || strncmp("get ", command, 4) == 0) {
get_opt_value(command, menu);
} else if (strncmp("s ", command, 2) == 0 || strncmp("set ", command, 4) == 0) {
set_opt_value(command, menu);
} else if (strncmp("r ", command, 2) == 0 || strncmp("reset ", command, 6) == 0) {
reset_value(command, menu);
} else if (strcmp("e\n", command) == 0 || strcmp("exit\n", command) == 0) {
if (!any_unset(head)) {
break;
}
} else {
fputs("Unknown command ", stdout);
fputs(command, stdout);
}
fputs("\nCommand: ", stdout);
fflush(stdout);
/*
* M2-Planet's fgets does not properly terminate the buffer if there is
* already data in it
*/
free(command);
command = calloc(MAX_STRING, sizeof(char));
command = fgets(command, MAX_STRING, stdin);
}
if (any_unset(head)) {
fputs(
"Uh oh! You have left me in a tough position - you can't input further because you\n"
"closed the input stream. But the inputs you gave me are not valid!\n"
"I'm going to re-exec myself and hope you are able to start again from scratch.\n",
stderr
);
execve(argv[0], argv, envp);
return 0;
}
write_cfg_values(head, extra, TRUE);
fputs("\nThank you! We will now continue with the bootstrap.\n", stdout);
return 0;
}
a990a8e2407bb4b01abcb3c2522a21ba26e1f6b86ab97c3fc9892ae5f2219f6f ./tmp/configurator
/*
* SPDX-FileCopyrightText: 2023 Samuel Tyler <samuel@samuelt.me>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#define MAX_TOKEN 64
#define MAX_STRING 2048
#include <bootstrappable.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Token {
char *val;
struct Token *next;
};
typedef struct Token Token;
#define TYPE_BUILD 1
#define TYPE_IMPROVE 2
#define TYPE_DEFINE 3
#define TYPE_JUMP 4
#define TYPE_UNINSTALL 5
struct Directive {
Token *tok;
struct Directive *next;
int type;
char *arg; /* The primary argument */
};
typedef struct Directive Directive;
/* Tokenizer. */
/* Skip over a comment. */
char consume_comment(FILE *in) {
/* Discard the rest of the line. */
char c = fgetc(in);
while (c != -1 && c != '\n')
c = fgetc(in);
return c;
}
char consume_line(FILE *in, Directive *directive) {
char c = fgetc(in);
/* Short-circuit if whole line is comment or blank line. */
if (c == '#') {
c = consume_comment(in);
return c;
} else if (c == '\n' || c == -1) {
return c;
}
/* Ok, we will have something to put here. */
directive->next = calloc(1, sizeof(Directive));
directive = directive->next;
Token *head = calloc(1, sizeof(Token));
Token *cur = head;
char *out;
int i = 0;
while (c != -1 && c != '\n') {
/* Initialize next token. */
cur->next = calloc(1, sizeof(Token));
cur = cur->next;
cur->val = calloc(MAX_TOKEN, sizeof(char));
out = cur->val;
/* Copy line to token until a space (or EOL/EOF) or comment is found. */
while (c != -1 && c != '\n' && c != ' ' && c != '#') {
out[0] = c;
out += 1;
c = fgetc(in);
}
/* Go to start of next token. */
if (c == ' ') {
c = fgetc(in);
}
/* Handle comment. */
if (c == '#') {
c = consume_comment(in);
}
}
/* Add information to directive. */
directive->tok = head->next;
return c;
}
Directive *tokenizer(FILE *in) {
Directive *head = calloc(1, sizeof(Directive));
Directive *cur = head;
char c;
while (c != -1) {
/*
* Note that consume_line fills cur->next, not cur.
* This avoids having an empty last Directive.
*/
c = consume_line(in, cur);
if (cur->next != NULL) {
cur = cur->next;
}
}
return head->next;
}
/* Config variables. */
struct Variable {
char *name;
char *val;
struct Variable *next;
};
typedef struct Variable Variable;
Variable *variables;
Variable *load_config(void) {
FILE *config = fopen("/steps/bootstrap.cfg", "r");
/* File does not exist check. */
if (config == NULL) {
return NULL;
}
char *line = calloc(MAX_STRING, sizeof(char));
Variable *head = calloc(1, sizeof(Variable));
Variable *cur = head;
/* For each line... */
char *equals;
while (fgets(line, MAX_STRING, config) != 0) {
/* Weird M2-Planet behaviour. */
if (*line == 0) {
break;
}
cur->next = calloc(1, sizeof(Variable));
cur = cur->next;
/* Split on the equals. First half is name, second half is value. */
equals = strchr(line, '=');
if (equals == 0) {
fputs("bootstrap.cfg should have the format var=val on each line.", stderr);
exit(1);
}
cur->name = calloc(equals - line + 1, sizeof(char));
strncpy(cur->name, line, equals - line);
equals += 1;
cur->val = calloc(strlen(equals), sizeof(char));
strncpy(cur->val, equals, strlen(equals) - 1);
line = calloc(MAX_STRING, sizeof(char));
}
variables = head->next;
fclose(config);
}
void output_config(FILE *out) {
Variable *variable;
for (variable = variables; variable != NULL; variable = variable->next) {
fputs(variable->name, out);
fputs("=", out);
fputs(variable->val, out);
fputs("\n", out);
}
}
char *get_var(char *name) {
/* Search through existing variables. */
Variable *var;
Variable *last = NULL;
for (var = variables; var != NULL; var = var->next) {
if (strcmp(name, var->name) == 0) {
return var->val;
}
last = var;
}
/* If the variable is unset, take it to be the empty string. */
return "";
}
/* Recursive descent interpreter. */
Token *fill(Token *tok, Directive *directive, int type) {
directive->type = type;
directive->arg = tok->val;
return tok->next;
}
Token *logic(Token *tok, char **val) {
/* logic = "("
* (name |
* (name "==" value) |
* (name "!=" value) |
* (logic "||" logic) |
* (logic "&&" logic))
* ")"
*/
char *lhs = tok->val;
char *rhs;
tok = tok->next;
if (strcmp(tok->val, ")") == 0) {
/* Case where it's just a constant. */
*val = lhs;
return tok;
} else if (strcmp(tok->val, "==") == 0) {
/* Case for equality. */
rhs = tok->next->val;
tok = tok->next->next;
if (strcmp(get_var(lhs), rhs) == 0) {
lhs = "True";
} else {
lhs = "False";
}
} else if (strcmp(tok->val, "!=") == 0) {
/* Case for inequality. */
rhs = tok->next->val;
tok = tok->next->next;
if (strcmp(get_var(lhs), rhs) == 0) {
lhs = "False";
} else {
lhs = "True";
}
} else {
fputs("Expected == or != after ", stderr);
fputs(lhs, stderr);
fputs(" in logic\n", stderr);
exit(1);
}
if (strcmp(tok->val, ")") == 0) {
*val = lhs;
return tok;
} else if (strcmp(tok->val, "||") == 0) {
/* OR */
tok = logic(tok->next, &rhs);
if (strcmp(lhs, "True") == 0 || strcmp(rhs, "True") == 0) {
lhs = "True";
} else {
lhs = "False";
}
} else if (strcmp(tok->val, "&&") == 0) {
/* AND */
tok = logic(tok->next, &rhs);
if (strcmp(lhs, "True") == 0 && strcmp(rhs, "True") == 0) {
lhs = "True";
} else {
lhs = "False";
}
} else {
fputs("Expected || or && in logic\n", stderr);
exit(1);
}
*val = lhs;
return tok;
}
Token *primary_logic(Token *tok, char **val) {
/* Starting ( */
if (strcmp(tok->val, "(") != 0) {
fputs("Expected logic to begin with (\n", stderr);
exit(1);
}
tok = tok->next;
tok = logic(tok, val);
if (strcmp(tok->val, ")") != 0) {
fputs("Expected logic to end with )\n", stderr);
exit(1);
}
return tok;
}
int eval_predicate(Token *tok) {
char *result;
tok = primary_logic(tok, &result);
return strcmp(result, "True") == 0;
}
Token *define(Token *tok, Directive *directive) {
/* define = name "=" (logic | constant) */
char *name = tok->val;
tok = tok->next;
if (strcmp(tok->val, "=") != 0) {
fputs("define of ", stderr);
fputs(name, stderr);
fputs(" has a missing equals\n", stderr);
exit(1);
}
tok = tok->next;
char *val = calloc(MAX_STRING, sizeof(char));
if (strcmp(tok->val, "(") == 0) {
/* It is a logic. */
tok = primary_logic(tok, &val);
} else {
/* It is a constant. */
strcpy(val, tok->val);
}
/* Check for predicate. */
tok = tok->next;
if (tok != NULL) {
if (!eval_predicate(tok)) {
/* Nothing more to do. */
return tok;
}
}
/* Update existing variable, or else, add to the end of variables. */
/* Special case: empty variables. */
if (variables == NULL) {
variables = calloc(1, sizeof(Variable));
variables->name = name;
variables->val = val;
}
Variable *var;
for (var = variables; var->next != NULL; var = var->next) {
if (strcmp(var->next->name, name) == 0) {
var->next->val = val;
break;
}
}
if (var->next == NULL) {
/* We did not update an existing variable. */
var->next = calloc(1, sizeof(Variable));
var->next->name = name;
var->next->val = val;
}
return tok;
}
int interpret(Directive *directive) {
/* directive = (build | improve | define | jump | uninstall) predicate? */
Token *tok = directive->tok;
if (strcmp(tok->val, "build:") == 0) {
tok = fill(tok->next, directive, TYPE_BUILD);
} else if (strcmp(tok->val, "improve:") == 0) {
tok = fill(tok->next, directive, TYPE_IMPROVE);
} else if (strcmp(tok->val, "jump:") == 0) {
tok = fill(tok->next, directive, TYPE_JUMP);
} else if (strcmp(tok->val, "define:") == 0) {
tok = define(tok->next, directive);
return 1; /* There is no codegen for a define. */
} else if (strcmp(tok->val, "uninstall:") == 0) {
tok = fill(tok->next, directive, TYPE_UNINSTALL);
while (tok != NULL) {
if (strcmp(tok->val, "(") == 0) {
break;
}
if (strlen(directive->arg) + strlen(tok->val) + 1 > MAX_STRING) {
fputs("somehow you have managed to have too many uninstall arguments.\n", stderr);
exit(1);
}
directive->arg = strcat(directive->arg, " ");
directive->arg = strcat(directive->arg, tok->val);
tok = tok->next;
}
}
if (tok != NULL) {
return !eval_predicate(tok);
}
return 0;
}
Directive *interpreter(Directive *directives) {
Directive *directive;
Directive *last = NULL;
for (directive = directives; directive != NULL; directive = directive->next) {
if (interpret(directive)) {
/* This means this directive needs to be removed from the linked list. */
if (last == NULL) {
/* First directive. */
directives = directive->next;
} else {
last->next = directive->next;
}
} else {
last = directive;
}
}
return directives;
}
/* Script generator. */
FILE *start_script(int id, int bash_build) {
/* Create the file /steps/$id.sh */
char *filename = calloc(MAX_STRING, sizeof(char));
sprintf(filename, "/steps/%d.sh", id);
FILE *out = fopen(filename, "w");
if (out == NULL) {
fputs("Error opening output file ", stderr);
fputs(filename, stderr);
fputs("\n", stderr);
exit(1);
}
if (bash_build) {
fputs("#!/bin/bash\n", out);
if (strcmp(get_var("INTERACTIVE"), "True") == 0) {
if (bash_build != 1) {
fputs("set -eEo pipefail\ntrap 'env PS1=\"[TRAP] \\w # \" bash -i' ERR\n", out);
} else {
/* FIXME early bash has buggy ERR trap handling */
fputs("set -e\ntrap 'bash -c '\"'\"'while true; do printf \""
"[TRAP - use Ctrl+D] $(pwd) # \"; eval \"$(cat)\"; done'\"'\"'' EXIT\n",
out);
}
} else {
fputs("set -e\n", out);
}
fputs("cd /steps\n", out);
fputs(". ./bootstrap.cfg\n", out);
fputs(". ./env\n", out);
fputs(". ./helpers.sh\n", out);
} else {
fputs("set -ex\n", out);
fputs("cd /steps\n", out);
output_config(out);
FILE *env = fopen("/steps/env", "r");
char *line = calloc(MAX_STRING, sizeof(char));
while (fgets(line, MAX_STRING, env) != 0) {
/* Weird M2-Planet behaviour. */
if (*line == 0) {
break;
}
fputs(line, out);
line = calloc(MAX_STRING, sizeof(char));
}
fclose(env);
}
return out;
}
void output_call_script(FILE *out, char *type, char *name, int bash_build, int source) {
if (bash_build) {
if (source) {
fputs(". ", out);
} else {
fputs("bash ", out);
}
} else {
fputs("kaem --file ", out);
}
fputs("/steps/", out);
if (strlen(type) != 0) {
fputs(type, out);
fputs("/", out);
}
fputs(name, out);
fputs(".sh\n", out);
}
void output_build(FILE *out, Directive *directive, int pass_no, int bash_build) {
if (bash_build) {
fputs("build ", out);
fputs(directive->arg, out);
fprintf(out, " pass%d.sh\n", pass_no);
} else {
fputs("pkg=", out);
fputs(directive->arg, out);
fputs("\n", out);
fputs("cd ${pkg}\n", out);
fprintf(out, "kaem --file pass%d.kaem\n", pass_no);
fputs("cd ..\n", out);
}
}
void generate_preseed_jump(int id) {
FILE *out = fopen("/preseed-jump.kaem", "w");
fputs("set -ex\n", out);
fputs("PATH=/usr/bin\n", out);
fprintf(out, "bash /steps/%d.sh\n", id);
fclose(out);
}
void generate(Directive *directives) {
/*
* We are separating the stages given in the mainfest into a bunch of
* smaller scripts. The following conditions call for the creation of
* a new script:
* - a jump
* - build of bash
*/
int counter = 0;
/* Initially, we use kaem, not bash. */
int bash_build = 0;
FILE *out = start_script(counter, bash_build);
counter += 1;
Directive *directive;
Directive *past;
char *filename;
int pass_no;
for (directive = directives; directive != NULL; directive = directive->next) {
if (directive->type == TYPE_BUILD) {
/* Get what pass number this is. */
pass_no = 1;
for (past = directives; past != directive; past = past->next) {
if (strcmp(past->arg, directive->arg) == 0) {
pass_no += 1;
}
}
output_build(out, directive, pass_no, bash_build);
if (strncmp(directive->arg, "bash-", 5) == 0) {
if (!bash_build) {
/*
* We are transitioning from bash to kaem, the point at which "early
* preseed" occurs. So generate the preseed jump script at this point.
*/
generate_preseed_jump(counter);
}
bash_build += 1;
/* Create call to new script. */
char s_counter[10];
sprintf(s_counter, "%d", counter);
output_call_script(out, "", s_counter, bash_build, 0);
fclose(out);
out = start_script(counter, bash_build);
counter += 1;
}
} else if (directive->type == TYPE_IMPROVE) {
output_call_script(out, "improve", directive->arg, bash_build, 1);
} else if (directive->type == TYPE_JUMP) {
/*
* Create /init to call new script.
* We actually do this by creating /init.X for some number X, and then
* moving that to /init at the appropriate time.
*/
filename = calloc(MAX_STRING, sizeof(char));
if (bash_build) {
fputs("mv /init /init.bak\n", out);
/* Move new init to /init. */
sprintf(filename, "/init.%d", counter);
fputs("cp ", out);
fputs(filename, out);
fputs(" /init\n", out);
fputs("chmod 755 /init\n", out);
} else {
sprintf(filename, "/kaem.run.%d", counter);
fputs("cp ", out);
fputs(filename, out);
fputs(" /kaem.run\n", out);
fputs("cp /usr/bin/kaem /init\n", out);
fputs("chmod 755 /init\n", out);
}
output_call_script(out, "jump", directive->arg, bash_build, 1);
fclose(out);
if (bash_build) {
out = fopen(filename, "w");
if (out == NULL) {
fputs("Error opening /init\n", stderr);
exit(1);
}
fputs("#!/bin/bash\n", out);
} else {
out = fopen(filename, "w");
if (out == NULL) {
fputs("Error opening /kaem.run\n", stderr);
exit(1);
}
fputs("set -ex\n", out);
}
char s_counter[10];
sprintf(s_counter, "%d", counter);
output_call_script(out, "", s_counter, bash_build, 0);
fclose(out);
out = start_script(counter, bash_build);
counter += 1;
} else if (directive->type == TYPE_UNINSTALL) {
fputs("uninstall ", out);
fputs(directive->arg, out);
fputs("\n", out);
}
}
fclose(out);
}
void main(int argc, char **argv) {
if (argc != 2) {
fputs("Usage: script-generator <script>\n", stderr);
exit(1);
}
FILE *in = fopen(argv[1], "r");
if (in == NULL) {
fputs("Error opening input file\n", stderr);
exit(1);
}
Directive *directives = tokenizer(in);
fclose(in);
load_config();
directives = interpreter(directives);
generate(directives);
FILE *config = fopen("/steps/bootstrap.cfg", "w");
output_config(config);
fclose(config);
}
de6344a81396f7a97d593b895d435f2d7484d5d1d9c1d5030c22707bf2297793 ./tmp/script-generator
# SPDX-FileCopyrightText: 2023 Samuel Tyler <samuel@samuelt.me> # # SPDX-License-Identifier: GPL-3.0-or-later # # This file follows a very simple, human readable and machine parseable syntax. # Each line is in the format: # <directive>: <arguments> <predicate> # # The supported directives and arguments are: # - build; simply builds a particular package. # eg, build: make-3.82 # - improve; runs a script that makes a distinct and logical improvement to the system. # eg, improve: use_fhs # - define: define a variable based upon other variables # eg, define: BUILD_FIWIX = KERNEL_BOOTSTRAP == True || BUILD_KERNELS == True # - jump: jump (usually) to a new kernel, executes a script with that name # eg, jump: fiwix # - uninstall; removes a package or filenames # eg, uninstall: perl-5.6.2 # eg, uninstall: /usr/bin/lex /usr/bin/flex # # The following directives have special significance: # - build directives beginning with "bash" (as well as jumps) trigger the generation of # a new script # - the first improve directive containing "network" is used by generator.py to deduce # what source files need to be downloaded in advance (files referenced after that will # be downloaded during bootstrap, unless --external-sources is given) # # Other features: # - predicate; based on variables set in bootstrap.cfg, require for something to execute # must be enclosed in brackets with spaces padded # eg, build: fiwix-1.5.0-lb1 ( BUILD_FIWIX == True ) build: checksum-transcriber-1.0 build: simple-patch-1.0 build: tcc-0.9.26 build: tcc-0.9.27
#!/bin/sh
# SPDX-FileCopyrightText: 2023 Samuel Tyler <samuel@samuelt.me>
#
# SPDX-License-Identifier: GPL-3.0-or-later
set -ex
# Build & install
tcc_cc -o /tmp/checksum-transcriber.sl /src/stdlib.c src/checksum-transcriber.c
stack_c -i /${ARCH}/stack_c_intro.M1 /tmp/checksum-transcriber.sl -o /tmp/checksum-transcriber.M1
blood-elf --file /tmp/checksum-transcriber.M1 --little-endian --output /tmp/checksum-transcriber.blood_elf
M1 /tmp/checksum-transcriber.M1 -o /tmp/checksum-transcriber.macro
hex2 -o ${BINDIR}/checksum-transcriber /${ARCH}/ELF-${ARCH}-debug.hex2 /tmp/checksum-transcriber.macro /tmp/checksum-transcriber.blood_elf
# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
sha256sum -o ${pkg}.${ARCH}.checksums \
/usr/bin/checksum-transcriber
cp ${pkg}.${ARCH}.checksums ${SRCDIR}
else
sha256sum -c ${pkg}.${ARCH}.checksums
fi
/*
* SPDX-FileCopyrightText: 2022 Samuel Tyler <samuel@samuelt.me>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <bootstrappable.h>
#include <unistd.h>
#include "../../../src/bootstrappable.c"
#define MAX_STRING 4096
#define MAX_TOKENS 8
char *get_distfiles(char **envp) {
char *envvar = "DISTFILES=";
int i = 0;
while (envp[i] != NULL && strncmp(envp[i], envvar, strlen(envvar)) != 0) i += 1;
// Now we have distfiles= - get just the part we want.
require(envp[i] != NULL, "Unable to find distfiles environment variable");
return envp[i] + strlen(envvar);
}
int main(int argc, char **argv) {
char **envp = argv + (argc + 1);
// Random file things
require(argc == 2, "Usage: checksum-transcriber FILENAME");
char *input = argv[1];
FILE *in = fopen(input, "r");
require(in != NULL, "File does not exist");
char *output = calloc(MAX_STRING, sizeof(char));
require(strcpy(output, input) != NULL, "Failed copying string");
require(strcat(output, ".SHA256SUM") != NULL, "Failed concating string");
FILE *out = fopen(output, "w+");
require(out != NULL, "Failed opening output file");
char *orig_line;
char *line = calloc(MAX_STRING, sizeof(char));
require(line != NULL, "Failed allocating string");
char **tokens;
char *new_line;
char *checksum;
char *filename;
int i;
fgets(line, MAX_STRING, in);
while (strlen(line) != 0) {
// Split each line into tokens
orig_line = line;
tokens = calloc(MAX_TOKENS, sizeof(char*));
i = 0;
while (i < MAX_TOKENS) {
tokens[i] = line;
new_line = strchr(line, ' ');
// Occurs when there are only two tokens
if (new_line == NULL) break;
line = new_line;
line[0] = '\0';
line += 1;
i += 1;
}
line = strchr(line, '\n');
line[0] = '\0';
// Only "file" type of distfile supported at this point
require(strcmp(tokens[0], "f") == 0 || strcmp(tokens[0], "file") == 0,
"Only support file distfile type at this point");
// Get checksum and filename
checksum = tokens[2];
if (tokens[3] != NULL) {
filename = tokens[3];
} else {
filename = strrchr(tokens[1], '/');
filename += 1;
}
// Put it all together
fputs(checksum, out);
fputs(" ", out);
fputs(get_distfiles(envp), out);
fputc('/', out);
fputs(filename, out);
fputc('\n', out);
// Cleanup
i = 0;
free(orig_line);
free(tokens);
line = calloc(MAX_STRING, sizeof(char));
require(line != NULL, "Failed allocating string");
fgets(line, MAX_STRING, in);
}
// Clean up
fclose(in);
fclose(out);
}
4207b0472b21a04b69a9bd748661b7cd6c61b2f77de62891d878e65538b47ea2 /usr/bin/checksum-transcriber
#!/bin/sh
# SPDX-FileCopyrightText: 2023 Samuel Tyler <samuel@samuelt.me>
#
# SPDX-License-Identifier: GPL-3.0-or-later
set -ex
# Build & install
tcc_cc -o /tmp/simple-patch.sl /src/stdlib.c src/simple-patch.c
stack_c -i /${ARCH}/stack_c_intro.M1 /tmp/simple-patch.sl -o /tmp/simple-patch.M1
blood-elf --file /tmp/simple-patch.M1 --little-endian --output /tmp/simple-patch.blood_elf
M1 /tmp/simple-patch.M1 -o /tmp/simple-patch.macro
hex2 -o ${BINDIR}/simple-patch /${ARCH}/ELF-${ARCH}-debug.hex2 /tmp/simple-patch.macro /tmp/simple-patch.blood_elf
# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
sha256sum -o ${pkg}.${ARCH}.checksums \
/usr/bin/simple-patch
cp ${pkg}.${ARCH}.checksums ${SRCDIR}
else
sha256sum -c ${pkg}.${ARCH}.checksums
fi
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "../../../src/bootstrappable.c"
/*
SPDX-FileCopyrightText: 2023 Richard Masters <grick23@gmail.com>
SPDX-License-Identifier: MIT
Simple Patch program.
This program is written in a subset of C called M2, which is from the
stage0-posix bootstrap project.
Example usage:
./simple-patch file_to_patch before_pattern_file after_pattern_file
*/
// function prototypes
void read_file_or_die(char *file_name, char **buffer, int *file_size);
void patch_buffer_or_die(char *patch_file_before_buffer, int patch_file_before_size,
char *before_pattern_buffer, int before_pattern_size,
char *after_pattern_buffer, int after_pattern_size,
char *patch_file_after_buffer);
void writestr_fd(int fd, char *str);
int memsame(char *search_buffer, int search_size,
char *pattern_buffer, int pattern_size);
int main(int argc, char **argv) {
char *patch_file_before_buffer;
int patch_file_before_size;
char *before_pattern_buffer;
int before_pattern_size;
char *after_pattern_buffer;
int after_pattern_size;
int patch_file_after_size;
char *patch_file_after_buffer;
int patch_file_fd;
read_file_or_die(argv[1], &patch_file_before_buffer, &patch_file_before_size);
read_file_or_die(argv[2], &before_pattern_buffer, &before_pattern_size);
read_file_or_die(argv[3], &after_pattern_buffer, &after_pattern_size);
patch_file_after_size = patch_file_before_size - before_pattern_size + after_pattern_size;
patch_file_after_buffer = calloc(patch_file_after_size, sizeof(char));
patch_buffer_or_die(patch_file_before_buffer, patch_file_before_size,
before_pattern_buffer, before_pattern_size,
after_pattern_buffer, after_pattern_size,
patch_file_after_buffer);
patch_file_fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0);
write(patch_file_fd, patch_file_after_buffer, patch_file_after_size);
close(patch_file_fd);
return EXIT_SUCCESS;
}
void read_file_or_die(char *file_name, char **buffer, int *file_size) {
int file_fd;
int num_bytes_read;
file_fd = open(file_name, O_RDONLY, 0);
if (file_fd == -1) {
writestr_fd(2, "Could not open file: ");
writestr_fd(2, file_name);
writestr_fd(2, "\n");
exit(1);
}
// determine file size
*file_size = lseek(file_fd, 0, SEEK_END);
// go back to beginning of file
lseek(file_fd, 0, SEEK_SET);
// alloc a buffer to read the entire file
*buffer = calloc(*file_size, sizeof(char));
// read the entire patch file
num_bytes_read = read(file_fd, *buffer, *file_size);
if (num_bytes_read != *file_size) {
writestr_fd(2, "Could not read file: ");
writestr_fd(2, file_name);
writestr_fd(2, "\n");
exit(1);
}
close(file_fd);
}
void patch_buffer_or_die(char *patch_file_before_buffer, int patch_file_before_size,
char *before_pattern_buffer, int before_pattern_size,
char *after_pattern_buffer, int after_pattern_size,
char *patch_file_after_buffer) {
char *pos = patch_file_before_buffer;
int prefix_len = 0;
// look for the pattern at every offset
while (prefix_len < patch_file_before_size) {
// if we find the pattern, replace it and return
if (memsame(pos, patch_file_before_size - prefix_len, before_pattern_buffer, before_pattern_size)) {
memcpy(patch_file_after_buffer, patch_file_before_buffer, prefix_len);
memcpy(patch_file_after_buffer + prefix_len, after_pattern_buffer, after_pattern_size);
memcpy(patch_file_after_buffer + prefix_len + after_pattern_size,
patch_file_before_buffer + prefix_len + before_pattern_size,
patch_file_before_size - (prefix_len + before_pattern_size));
return;
}
pos = pos + 1;
prefix_len = prefix_len + 1;
}
/* if we don't find the pattern, something is wrong, so exit with error */
exit(1);
}
/*
Write the string to the given file descriptor.
*/
void writestr_fd(int fd, char *str) {
write(fd, str, strlen(str));
}
/*
Is the pattern located at the start of the search buffer
(and not exceeding the length of the search buffer)?
*/
int memsame(char *search_buffer, int search_size,
char *pattern_buffer, int pattern_size) {
int check_offset = 0;
if (pattern_size > search_size) {
return FALSE;
}
while (check_offset < pattern_size) {
if (search_buffer[check_offset] != pattern_buffer[check_offset]) {
return FALSE;
}
check_offset = check_offset + 1;
}
return TRUE;
}
d028725b7b8be45c7858b73acef848f8b015d78c68ad69dba45526f9b27453e5 /usr/bin/simple-patch
#!/bin/sh
# SPDX-FileCopyrightText: 2021-22 Samuel Tyler <samuel@samuelt.me>
#
# SPDX-License-Identifier: GPL-3.0-or-later
set -ex
# Vars
TCC_TAR=tcc-0.9.26
TCC_PKG=tcc-0.9.26-1147-gee75a10c
# Check tarball checksums
checksum-transcriber sources
sha256sum -c sources.SHA256SUM
# Unpack
mkdir -p build
cd build
ungz --file ${DISTFILES}/${TCC_TAR}.tar.gz --output ${TCC_TAR}.tar
untar --non-strict --file ${TCC_TAR}.tar
simple-patch ${TCC_PKG}/tcctools.c \
../simple-patches/remove-fileopen.before ../simple-patches/remove-fileopen.after
simple-patch ${TCC_PKG}/tcctools.c \
../simple-patches/addback-fileopen.before ../simple-patches/addback-fileopen.after
ungz --file ${DISTFILES}/${MES_PKG}.tar.gz --output ${MES_PKG}.tar
untar --non-strict --file ${MES_PKG}.tar
# Create config.h
catm ${MES_PKG}/include/mes/config.h
catm ${TCC_PKG}/config.h
cd ${TCC_PKG}
if match ${ARCH} x86; then
MES_ARCH=x86
TCC_TARGET_ARCH=I386
HAVE_LONG_LONG=0
fi
if match ${ARCH} amd64; then
MES_ARCH=x86_64
TCC_TARGET_ARCH=X86_64
HAVE_LONG_LONG=1
fi
if match ${ARCH} riscv64; then
MES_ARCH=riscv64
TCC_TARGET_ARCH=RISCV64
HAVE_LONG_LONG=1
fi
${BINDIR}/tcc_cc \
-o ${TMPDIR}/tcc.sl \
-D BOOTSTRAP=1 \
-D HAVE_LONG_LONG=${HAVE_LONG_LONG} \
-D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
-D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
-D CONFIG_SYSROOT=\"/\" \
-D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
-D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
-D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
-D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
-D CONFIG_TCC_LIBTCC1_MES=0 \
-D CONFIG_TCCBOOT=1 \
-D CONFIG_TCC_STATIC=1 \
-D CONFIG_USE_LIBGCC=1 \
-D TCC_VERSION=\"0.9.26\" \
-D ONE_SOURCE=1 \
/src/stdlib.c tcc.c
${BINDIR}/stack_c -i /${ARCH}/stack_c_intro.M1 ${TMPDIR}/tcc.sl -o ${TMPDIR}/tcc_s.M1
${BINDIR}/blood-elf --file ${TMPDIR}/tcc_s.M1 --little-endian --output ${TMPDIR}/tcc_s.blood_elf
${BINDIR}/M1 ${TMPDIR}/tcc_s.M1 -o ${TMPDIR}/tcc_s.macro
${BINDIR}/hex2 -o /usr/bin/tcc_s /${ARCH}/ELF-${ARCH}-debug.hex2 ${TMPDIR}/tcc_s.macro ${TMPDIR}/tcc_s.blood_elf
# test tcc_s
tcc_s -version
# Recompile the mes C library
cd ../${MES_PKG}
# Install header files
cd include
mkdir -p ${INCDIR}
cp alloca.h ${INCDIR}/alloca.h
cp argz.h ${INCDIR}/argz.h
cp ar.h ${INCDIR}/ar.h
cp assert.h ${INCDIR}/assert.h
cp ctype.h ${INCDIR}/ctype.h
cp dirent.h ${INCDIR}/dirent.h
cp dirstream.h ${INCDIR}/dirstream.h
cp dlfcn.h ${INCDIR}/dlfcn.h
cp endian.h ${INCDIR}/endian.h
cp errno.h ${INCDIR}/errno.h
cp fcntl.h ${INCDIR}/fcntl.h
cp features.h ${INCDIR}/features.h
cp float.h ${INCDIR}/float.h
cp getopt.h ${INCDIR}/getopt.h
cp grp.h ${INCDIR}/grp.h
cp inttypes.h ${INCDIR}/inttypes.h
cp libgen.h ${INCDIR}/libgen.h
cp limits.h ${INCDIR}/limits.h
cp locale.h ${INCDIR}/locale.h
cp math.h ${INCDIR}/math.h
cp memory.h ${INCDIR}/memory.h
cp pwd.h ${INCDIR}/pwd.h
cp setjmp.h ${INCDIR}/setjmp.h
cp signal.h ${INCDIR}/signal.h
cp stdarg.h ${INCDIR}/stdarg.h
cp stdbool.h ${INCDIR}/stdbool.h
cp stddef.h ${INCDIR}/stddef.h
cp stdint.h ${INCDIR}/stdint.h
cp stdio.h ${INCDIR}/stdio.h
cp stdlib.h ${INCDIR}/stdlib.h
cp stdnoreturn.h ${INCDIR}/stdnoreturn.h
cp string.h ${INCDIR}/string.h
cp strings.h ${INCDIR}/strings.h
cp termio.h ${INCDIR}/termio.h
cp time.h ${INCDIR}/time.h
cp unistd.h ${INCDIR}/unistd.h
mkdir -p ${INCDIR}/arch
cp linux/${MES_ARCH}/kernel-stat.h ${INCDIR}/arch/kernel-stat.h
cp linux/${MES_ARCH}/signal.h ${INCDIR}/arch/signal.h
cp linux/${MES_ARCH}/syscall.h ${INCDIR}/arch/syscall.h
mkdir -p ${INCDIR}/linux/${MES_ARCH}
cp linux/syscall.h ${INCDIR}/linux/syscall.h
mkdir -p ${INCDIR}/mes
cp mes/builtins.h ${INCDIR}/mes/builtins.h
cp mes/cc.h ${INCDIR}/mes/cc.h
catm ${INCDIR}/mes/config.h
cp mes/constants.h ${INCDIR}/mes/constants.h
cp mes/lib.h ${INCDIR}/mes/lib.h
cp mes/lib-cc.h ${INCDIR}/mes/lib-cc.h
cp mes/lib-mini.h ${INCDIR}/mes/lib-mini.h
cp mes/mes.h ${INCDIR}/mes/mes.h
cp mes/symbols.h ${INCDIR}/mes/symbols.h
mkdir -p ${INCDIR}/sys
cp sys/cdefs.h ${INCDIR}/sys/cdefs.h
cp sys/dir.h ${INCDIR}/sys/dir.h
cp sys/file.h ${INCDIR}/sys/file.h
cp sys/ioctl.h ${INCDIR}/sys/ioctl.h
cp sys/mman.h ${INCDIR}/sys/mman.h
cp sys/param.h ${INCDIR}/sys/param.h
cp sys/resource.h ${INCDIR}/sys/resource.h
cp sys/select.h ${INCDIR}/sys/select.h
cp sys/stat.h ${INCDIR}/sys/stat.h
cp sys/timeb.h ${INCDIR}/sys/timeb.h
cp sys/time.h ${INCDIR}/sys/time.h
cp sys/times.h ${INCDIR}/sys/times.h
cp sys/types.h ${INCDIR}/sys/types.h
cp sys/ucontext.h ${INCDIR}/sys/ucontext.h
cp sys/user.h ${INCDIR}/sys/user.h
cp sys/wait.h ${INCDIR}/sys/wait.h
cd ..
# Create unified libc file
cd lib
catm ../unified-libc.c ctype/isalnum.c ctype/isalpha.c ctype/isascii.c ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c ctype/islower.c ctype/isnumber.c ctype/isprint.c ctype/ispunct.c ctype/isspace.c ctype/isupper.c ctype/isxdigit.c ctype/tolower.c ctype/toupper.c dirent/closedir.c dirent/__getdirentries.c dirent/opendir.c linux/readdir.c linux/access.c linux/brk.c linux/chdir.c linux/chmod.c linux/clock_gettime.c linux/close.c linux/dup2.c linux/dup.c linux/execve.c linux/fcntl.c linux/fork.c linux/fsync.c linux/fstat.c linux/_getcwd.c linux/getdents.c linux/getegid.c linux/geteuid.c linux/getgid.c linux/getpid.c linux/getppid.c linux/getrusage.c linux/gettimeofday.c linux/getuid.c linux/ioctl.c linux/ioctl3.c linux/kill.c linux/link.c linux/lseek.c linux/lstat.c linux/malloc.c linux/mkdir.c linux/mknod.c linux/nanosleep.c linux/_open3.c linux/pipe.c linux/_read.c linux/readlink.c linux/rename.c linux/rmdir.c linux/setgid.c linux/settimer.c linux/setuid.c linux/signal.c linux/sigprogmask.c linux/symlink.c linux/stat.c linux/time.c linux/unlink.c linux/waitpid.c linux/wait4.c linux/${MES_ARCH}-mes-gcc/_exit.c linux/${MES_ARCH}-mes-gcc/syscall.c linux/${MES_ARCH}-mes-gcc/_write.c math/ceil.c math/fabs.c math/floor.c mes/abtod.c mes/abtol.c mes/__assert_fail.c mes/assert_msg.c mes/__buffered_read.c mes/__init_io.c mes/cast.c mes/dtoab.c mes/eputc.c mes/eputs.c mes/fdgetc.c mes/fdgets.c mes/fdputc.c mes/fdputs.c mes/fdungetc.c mes/globals.c mes/itoa.c mes/ltoab.c mes/ltoa.c mes/__mes_debug.c mes/mes_open.c mes/ntoab.c mes/oputc.c mes/oputs.c mes/search-path.c mes/ultoa.c mes/utoa.c posix/alarm.c posix/buffered-read.c posix/execl.c posix/execlp.c posix/execv.c posix/execvp.c posix/getcwd.c posix/getenv.c posix/isatty.c posix/mktemp.c posix/open.c posix/pathconf.c posix/raise.c posix/sbrk.c posix/setenv.c posix/sleep.c posix/unsetenv.c posix/wait.c posix/write.c stdio/clearerr.c stdio/fclose.c stdio/fdopen.c stdio/feof.c stdio/ferror.c stdio/fflush.c stdio/fgetc.c stdio/fgets.c stdio/fileno.c stdio/fopen.c stdio/fprintf.c stdio/fputc.c stdio/fputs.c stdio/fread.c stdio/freopen.c stdio/fscanf.c stdio/fseek.c stdio/ftell.c stdio/fwrite.c stdio/getc.c stdio/getchar.c stdio/perror.c stdio/printf.c stdio/putc.c stdio/putchar.c stdio/remove.c stdio/snprintf.c stdio/sprintf.c stdio/sscanf.c stdio/ungetc.c stdio/vfprintf.c stdio/vfscanf.c stdio/vprintf.c stdio/vsnprintf.c stdio/vsprintf.c stdio/vsscanf.c stdlib/abort.c stdlib/abs.c stdlib/alloca.c stdlib/atexit.c stdlib/atof.c stdlib/atoi.c stdlib/atol.c stdlib/calloc.c stdlib/__exit.c stdlib/exit.c stdlib/free.c stdlib/mbstowcs.c stdlib/puts.c stdlib/qsort.c stdlib/realloc.c stdlib/strtod.c stdlib/strtof.c stdlib/strtol.c stdlib/strtold.c stdlib/strtoll.c stdlib/strtoul.c stdlib/strtoull.c string/bcmp.c string/bcopy.c string/bzero.c string/index.c string/memchr.c string/memcmp.c string/memcpy.c string/memmem.c string/memmove.c string/memset.c string/rindex.c string/strcat.c string/strchr.c string/strcmp.c string/strcpy.c string/strcspn.c string/strdup.c string/strerror.c string/strlen.c string/strlwr.c string/strncat.c string/strncmp.c string/strncpy.c string/strpbrk.c string/strrchr.c string/strspn.c string/strstr.c string/strupr.c stub/atan2.c stub/bsearch.c stub/chown.c stub/__cleanup.c stub/cos.c stub/ctime.c stub/exp.c stub/fpurge.c stub/freadahead.c stub/frexp.c stub/getgrgid.c stub/getgrnam.c stub/getlogin.c stub/getpgid.c stub/getpgrp.c stub/getpwnam.c stub/getpwuid.c stub/gmtime.c stub/ldexp.c stub/localtime.c stub/log.c stub/mktime.c stub/modf.c stub/mprotect.c stub/pclose.c stub/popen.c stub/pow.c stub/putenv.c stub/rand.c stub/realpath.c stub/rewind.c stub/setbuf.c stub/setgrent.c stub/setlocale.c stub/setvbuf.c stub/sigaction.c stub/sigaddset.c stub/sigblock.c stub/sigdelset.c stub/sigemptyset.c stub/sigsetmask.c stub/sin.c stub/sys_siglist.c stub/system.c stub/sqrt.c stub/strftime.c stub/times.c stub/ttyname.c stub/umask.c stub/utime.c ${MES_ARCH}-mes-gcc/setjmp.c
cd ..
# crt1.o
mkdir -p ${LIBDIR}
tcc_s -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crt1.o lib/linux/${MES_ARCH}-mes-gcc/crt1.c
catm ${LIBDIR}/crtn.o
catm ${LIBDIR}/crti.o
if match ${ARCH} x86; then
# crtn.o
tcc_s -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crtn.o lib/linux/${MES_ARCH}-mes-gcc/crtn.c
# crti.o
tcc_s -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crti.o lib/linux/${MES_ARCH}-mes-gcc/crti.c
fi
# libc+gcc.a
tcc_s -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
tcc_s -ar cr ${LIBDIR}/libc.a unified-libc.o
# libtcc1.a
mkdir -p ${LIBDIR}/tcc
tcc_s -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o libtcc1.o lib/libtcc1.c
if match ${ARCH} riscv64; then
tcc_s -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
tcc_s -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
else
tcc_s -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
fi
# libgetopt.a
tcc_s -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} lib/posix/getopt.c
tcc_s -ar cr ${LIBDIR}/libgetopt.a getopt.o
cd ../${TCC_PKG}
# boot0 (ref comments here for all boot*)
# compile
tcc_s \
-g \
-v \
-static \
-o tcc-boot0 \
-D BOOTSTRAP=1 \
-D HAVE_FLOAT=1 \
-D HAVE_BITFIELD=1 \
-D HAVE_LONG_LONG=1 \
-D HAVE_SETJMP=1 \
-I . \
-I ${PREFIX}/include/mes \
-D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
-D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
-D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
-D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
-D CONFIG_TCC_LIBPATHS=\"${LIBDIR}:${LIBDIR}/tcc\" \
-D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
-D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
-D TCC_LIBTCC1=\"libtcc1.a\" \
-D CONFIG_TCCBOOT=1 \
-D CONFIG_TCC_STATIC=1 \
-D CONFIG_USE_LIBGCC=1 \
-D TCC_VERSION=\"0.9.26\" \
-D ONE_SOURCE=1 \
-L . \
-L ${LIBDIR} \
tcc.c
# Install
cp tcc-boot0 ${BINDIR}/
chmod 755 ${BINDIR}/tcc-boot0
cd ../${MES_PKG}
# Recompile libc: crt{1,n,i}, libtcc.a, libc.a
tcc-boot0 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crt1.o lib/linux/${MES_ARCH}-mes-gcc/crt1.c
if match ${ARCH} x86; then
tcc-boot0 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crtn.o lib/linux/${MES_ARCH}-mes-gcc/crtn.c
tcc-boot0 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crti.o lib/linux/${MES_ARCH}-mes-gcc/crti.c
fi
tcc-boot0 -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o libtcc1.o lib/libtcc1.c
if match ${ARCH} riscv64; then
tcc-boot0 -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
tcc-boot0 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
else
tcc-boot0 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
fi
tcc-boot0 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
tcc-boot0 -ar cr ${LIBDIR}/libc.a unified-libc.o
cd ../${TCC_PKG}
# Test boot0
tcc-boot0 -version
# boot1
tcc-boot0 \
-g \
-v \
-static \
-o tcc-boot1 \
-D BOOTSTRAP=1 \
-D HAVE_FLOAT=1 \
-D HAVE_BITFIELD=1 \
-D HAVE_LONG_LONG=1 \
-D HAVE_SETJMP=1 \
-I . \
-I ${PREFIX}/include/mes \
-D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
-D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
-D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
-D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
-D CONFIG_TCC_LIBPATHS=\"${LIBDIR}:${LIBDIR}/tcc\" \
-D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
-D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
-D TCC_LIBTCC1=\"libtcc1.a\" \
-D CONFIG_TCCBOOT=1 \
-D CONFIG_TCC_STATIC=1 \
-D CONFIG_USE_LIBGCC=1 \
-D TCC_VERSION=\"0.9.26\" \
-D ONE_SOURCE=1 \
-L . \
tcc.c
cp tcc-boot1 ${BINDIR}
chmod 755 ${BINDIR}/tcc-boot1
cd ../${MES_PKG}
tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crt1.o lib/linux/${MES_ARCH}-mes-gcc/crt1.c
if match ${ARCH} x86; then
tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crtn.o lib/linux/${MES_ARCH}-mes-gcc/crtn.c
tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crti.o lib/linux/${MES_ARCH}-mes-gcc/crti.c
fi
tcc-boot1 -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o libtcc1.o lib/libtcc1.c
if match ${ARCH} riscv64; then
tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
tcc-boot1 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
else
tcc-boot1 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
fi
tcc-boot1 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
tcc-boot1 -ar cr ${LIBDIR}/libc.a unified-libc.o
cd ../${TCC_PKG}
# Test boot1
tcc-boot1 -version
# boot2
tcc-boot1 \
-g \
-v \
-static \
-o tcc-boot2 \
-D BOOTSTRAP=1 \
-D HAVE_BITFIELD=1 \
-D HAVE_FLOAT=1 \
-D HAVE_LONG_LONG=1 \
-D HAVE_SETJMP=1 \
-I . \
-I ${PREFIX}/include/mes \
-D TCC_TARGET_${TCC_TARGET_ARCH}=1 \
-D CONFIG_TCCDIR=\"${LIBDIR}/tcc\" \
-D CONFIG_TCC_CRTPREFIX=\"${LIBDIR}\" \
-D CONFIG_TCC_ELFINTERP=\"/mes/loader\" \
-D CONFIG_TCC_LIBPATHS=\"${LIBDIR}:${LIBDIR}/tcc\" \
-D CONFIG_TCC_SYSINCLUDEPATHS=\"${PREFIX}/include/mes\" \
-D TCC_LIBGCC=\"${LIBDIR}/libc.a\" \
-D TCC_LIBTCC1=\"libtcc1.a\" \
-D CONFIG_TCCBOOT=1 \
-D CONFIG_TCC_STATIC=1 \
-D CONFIG_USE_LIBGCC=1 \
-D TCC_VERSION=\"0.9.26\" \
-D ONE_SOURCE=1 \
-L . \
tcc.c
cp tcc-boot2 ${BINDIR}
chmod 755 ${BINDIR}/tcc-boot2
cd ../${MES_PKG}
tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crt1.o lib/linux/${MES_ARCH}-mes-gcc/crt1.c
if match ${ARCH} x86; then
tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crtn.o lib/linux/${MES_ARCH}-mes-gcc/crtn.c
tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o ${LIBDIR}/crti.o lib/linux/${MES_ARCH}-mes-gcc/crti.c
fi
tcc-boot2 -c -D HAVE_CONFIG_H=1 -D HAVE_LONG_LONG=1 -D HAVE_FLOAT=1 -I include -I include/linux/${MES_ARCH} -o libtcc1.o lib/libtcc1.c
if match ${ARCH} riscv64; then
tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o lib-arm64.o ../${TCC_PKG}/lib/lib-arm64.c
tcc-boot2 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o lib-arm64.o
else
tcc-boot2 -ar cr ${LIBDIR}/tcc/libtcc1.a libtcc1.o
fi
tcc-boot2 -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} -o unified-libc.o unified-libc.c
tcc-boot2 -ar cr ${LIBDIR}/libc.a unified-libc.o
cd ../${TCC_PKG}
# Test boot2
tcc-boot2 -version
# We have our final tcc 0.9.26!
cp ${BINDIR}/tcc-boot2 ${BINDIR}/tcc
chmod 755 ${BINDIR}/tcc
rm ${BINDIR}/tcc-boot2
cp ${BINDIR}/tcc ${BINDIR}/tcc-0.9.26
chmod 755 ${BINDIR}/tcc-0.9.26
# Also recompile getopt, we don't need to do this during the boot* stages
# because nothing is linked against it
cd ../${MES_PKG}
tcc -c -D HAVE_CONFIG_H=1 -I include -I include/linux/${MES_ARCH} lib/posix/getopt.c
tcc -ar cr ${LIBDIR}/libgetopt.a getopt.o
cd ../..
# Checksums
if match x${UPDATE_CHECKSUMS} xTrue; then
sha256sum -o ${pkg}.${ARCH}.checksums \
/usr/bin/tcc-boot1 \
/usr/bin/tcc \
/usr/lib/mes/libc.a \
/usr/lib/mes/libgetopt.a \
/usr/lib/mes/crt1.o \
/usr/lib/mes/crti.o \
/usr/lib/mes/crtn.o \
/usr/lib/mes/tcc/libtcc1.a
cp ${pkg}.${ARCH}.checksums ${SRCDIR}
else
sha256sum -c ${pkg}.${ARCH}.checksums
fi
f https://lilypond.org/janneke/tcc/tcc-0.9.26-1147-gee75a10c.tar.gz 6b8cbd0a5fed0636d4f0f763a603247bc1935e206e1cc5bda6a2818bab6e819f tcc-0.9.26.tar.gz
if (ret == 1)
return ar_usage(ret);
if ((fh = fopen(argv[i_lib], "wb")) == NULL)
{
fprintf(stderr, "tcc: ar: can't open file %s \n", argv[i_lib]);
goto the_end;
}
if (ret == 1)
return ar_usage(ret);
// write header
if ((fh = fopen(argv[i_lib], "wb")) == NULL)
{
fprintf(stderr, "tcc: ar: can't open file %s \n", argv[i_lib]);
goto the_end;
}
// write header
#!/bin/sh
set -x
cp -f task3/kaem.x86 rootfs/kaem.x86
cp -f task3/tools-seed-kaem.kaem rootfs/x86
cp -f task3/tools-mini-kaem.kaem rootfs/x86
cp -f task3/check-tools.kaem rootfs/x86
cp -f task3/tools-kaem.kaem rootfs/x86
cp -f task3/after.kaem rootfs/x86
cp -f task3/seed.kaem rootfs
sudo chroot --userspec=${USER}:${USER} rootfs /bootstrap-seeds/POSIX/x86/kaem-optional-seed
#sudo strace -f -o trace2.txt -e trace=open,openat,close,chmod,chdir,dup,fcntl,link,linkat,unlink,fork,execve chroot --userspec=${USER}:${USER} rootfs /bootstrap-seeds/POSIX/x86/kaem-optional-seed
Below the version of the scan_trace.cpp program is given that is used to produce this page.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
// ---------------------------------
char *copystr(const char *str)
{
char *new_str = (char*)malloc(strlen(str) + 1);
strcpy(new_str, str);
return new_str;
}
FILE *fout = stdout;
#define MAX_FILENAME_LEN 500
// ---------------------------------
class SubModule
{
public:
char *path;
char *url;
SubModule *next;
SubModule(const char *p, const char *u, SubModule *n) : next(n)
{
path = copystr(p);
url = copystr(u);
}
};
SubModule* lbs_subModules = 0;
SubModule* dist_subModules = 0;
void addSubModule(const char *path, const char *url) { lbs_subModules = new SubModule(path, url, lbs_subModules); }
void addDistSubModule(const char *path, const char *url) { dist_subModules = new SubModule(path, url, dist_subModules); }
const char *source_dir = "";
size_t len_source_dir;
void read_commit_hash(const char *path, char *commit)
{
FILE *f = fopen(path, "r");
if (f == 0)
commit[0] = '\0';
else
{
if (fgets(commit, 41, f))
commit[40] = '\0';
else
commit[0] = '\0';
fclose(f);
}
fprintf(fout, "Head file: '%s': %s\n", path, commit);
}
void read_sub_modules(const char *fn, char *modules_dir)
{
char complete_path[MAX_FILENAME_LEN+1];
strcpy(complete_path, fn);
char *s_path = complete_path + strlen(complete_path);
char *m_path = modules_dir + strlen(modules_dir);
strcpy(s_path, ".gitmodules");
FILE *f = fopen(complete_path, "r");
if (f == 0)
return;
//fprintf(fout, "Parsing %s %s\n", complete_path, modules_dir);
char path[MAX_FILENAME_LEN+1];
char url[MAX_FILENAME_LEN+1];
while (fgets(path, MAX_FILENAME_LEN, f))
{
if (!strncmp(path, "\tpath = ", 8) == 0)
continue;
if (fgets(url, MAX_FILENAME_LEN, f) && strncmp(url, "\turl = ", 7) == 0)
{
//fprintf(fout, "1: %s2: %s", path, url);
while (path[strlen(path)-1] < ' ') path[strlen(path)-1] = '\0';
while (url[strlen(url)-1] < ' ') url[strlen(url)-1] = '\0';
char *s = strstr(url, ".git");
if (s != 0) *s = '\0';
sprintf(s_path, "%s/", path + 8);
char *source = complete_path + len_source_dir;
sprintf(m_path, "%s/HEAD", path + 8);
char commit[41];
read_commit_hash(modules_dir, commit);
//fprintf(fout, "Head file: '%s': %s\n", modules_dir, commit);
sprintf(m_path, "%s/modules/", path + 8);
char complete_url[MAX_FILENAME_LEN+1];
if (strncmp(url + 7, "https://github.com/", 19) == 0)
{
if (commit[0] == '\0')
sprintf(complete_url, "%s/blob/main/%%s", url + 7);
else
sprintf(complete_url, "%s/blob/%s/%%s", url + 7, commit);
}
else if (strncmp(url + 7, "https://git.savannah.nongnu.org/git/", 36) == 0)
{
if (commit[0] == '\0')
sprintf(complete_url, "https://git.savannah.nongnu.org/gitweb/?p=%s.git;a=blob;f=%%s", url + 43);
else
sprintf(complete_url, "https://git.savannah.nongnu.org/gitweb/?p=%s.git;a=blob;f=%%s;id=%s", url + 43, commit);
}
else
sprintf(complete_url, "%s%%s", url + 7);
//printf("Submodule %s %s|\n", source, complete_url);
addSubModule(source, complete_url);
read_sub_modules(complete_path, modules_dir);
}
}
}
char live_bootstrap_commit[41];
void init_subModules()
{
// Root directory:
char path[MAX_FILENAME_LEN+1];
snprintf(path, MAX_FILENAME_LEN, "%s.git/refs/heads/main", source_dir);
read_commit_hash(path, live_bootstrap_commit);
snprintf(path, MAX_FILENAME_LEN, "https://github.com/FransFaase/MES-replacement/blob/%s/%%s",
live_bootstrap_commit[0] == '\0' ? "main" : live_bootstrap_commit);
addSubModule("", path);
// Sub modules
char modules_dir[MAX_FILENAME_LEN+1];
snprintf(modules_dir, MAX_FILENAME_LEN, "%s.git/modules/", source_dir);
read_sub_modules(source_dir, modules_dir);
// Exclude some directories
addSubModule("distfiles", "--");
// Extra for files that have been unpacked from distribution
addDistSubModule("/steps/tcc-0.9.26/build/mes-0.26/", "https://git.savannah.gnu.org/cgit/mes.git/tree/%s?h=v0.26");
addDistSubModule("/steps/tcc-0.9.26/build/tcc-0.9.26-1147-gee75a10c/", "https://github.com/TinyCC/tinycc/tree/d5e22108a0dc48899e44a158f91d5b3215eb7fe6/%s");
addDistSubModule("/steps/mes-0.26/build/mes-0.26/", "https://git.savannah.gnu.org/cgit/mes.git/tree/%s?h=v0.26");
addDistSubModule("/steps/mes-0.26/build/nyacc-1.00.2/", "https://git.savannah.gnu.org/cgit/nyacc.git/tree/%s?h=V1.00.2");
}
char *get_url(const char *path, SubModule *subModules)
{
for (SubModule *subModule = subModules; subModule != 0; subModule = subModule->next)
{
size_t path_len = strlen(subModule->path);
if (strncmp(path, subModule->path, path_len) == 0)
{
char url[MAX_FILENAME_LEN+1];
snprintf(url, MAX_FILENAME_LEN, subModule->url, path + path_len);
return copystr(url);
}
}
return 0;
}
// ---------------------------------
class File;
class Action;
class Process;
class LineInFile
{
public:
const char *text;
File *file;
long line;
LineInFile *next;
LineInFile(const char *t, File *f, long l) : text(copystr(t)), file(f), line(l), next(0) {}
LineInFile(LineInFile *lif, int offset = 0) : text(lif->text + offset), file(lif->file), line(lif->line), next(0) {}
};
class MergeChild;
int nr_files = 0;
class File
{
public:
char *name;
int nr;
bool is_source;
char *source_name;
char *url;
File *copy_from;
Action *actions;
File *next;
File(const char *fn) : is_source(false), source_name(0), url(0), copy_from(0), actions(0), next(0)
{
name = copystr(fn);
nr = nr_files++;
}
void init_source();
bool exec_before_created();
bool used_as_input();
bool produced_and_not_removed();
};
File *files = 0;
int nr_processes = 0;
class Process
{
public:
int nr;
unsigned long pid;
Process *parent;
Action *actions;
Process *next;
Process(unsigned long _pid) : pid(_pid), parent(0), actions(0), next(0)
{
nr = ++nr_processes;
}
bool hasInputUseOf(File *f);
Action *lastOpenAction(int handle);
};
Process *all_processes = 0;
Process **ref_next = &all_processes;
Process *next_process(unsigned long pid)
{
Process *process = new Process(pid);
*ref_next = process;
ref_next = &process->next;
return process;
}
Process *find_process(unsigned long pid)
{
Process *cached_process = 0;
if (cached_process != 0 && cached_process->pid == pid)
return cached_process;
for (Process *process = all_processes; process != 0; process = process->next)
if (process->pid == pid)
{
cached_process = process;
return process;
}
return 0;
}
class MergeChild
{
public:
File *child;
MergeChild *next;
MergeChild(File *file) : child(file), next(0) {}
};
File *get_file(const char *full_fn /*, bool use_alias = true*/)
{
File **ref = &files;
for (; *ref != 0; ref = &(*ref)->next)
if (strcmp((*ref)->name, full_fn) == 0)
return /*(*ref)->alias != 0 && use_alias ? (*ref)->alias :*/ (*ref);
*ref = new File(full_fn);
return *ref;
}
unsigned long read_unsigned_long(char *&s)
{
unsigned long result = 0;
if (*s == '0')
{
for (s++; '0' <= *s && *s <= '7'; s++)
result = 8 * result + *s - '0';
return result;
}
for (; '0' <= *s && *s <= '9'; s++)
result = 10 * result + *s - '0';
return result;
}
long read_long(char *&s)
{
long sign = 1;
long result = 0;
if (*s == '-')
{
sign = -1;
s++;
}
for (; '0' <= *s && *s <= '9'; s++)
result = 10 * result + *s - '0';
return sign * result;
}
int indent_depth = 0;
void indent(FILE *fout) { fprintf(fout, "%*.*s", indent_depth, indent_depth, ""); }
FILE *fout_usage = 0;
class Action
{
public:
char kind; // one of 'e' - execute, 'o' - open, 'r' - removed, 'c' - change mode, 'E' - execute child
bool o_rdonly;
bool o_wronly;
bool o_rdwr;
bool o_creat;
bool o_trunc;
bool o_excl;
int file_handle;
bool is_closed;
int mode;
bool from_archive;
Process *child_process;
File *file;
Process *process;
char json_kind;
Process *file_created_by;
Action *next_in_process;
Action *next_on_file;
Action (File *_file, Process *_process, char _kind)
: kind(_kind),
o_rdonly(false), o_wronly(false), o_rdwr(false), o_creat(false), o_trunc(false), o_excl(false), file_handle(-1), is_closed(false),
mode(0),
from_archive(false),
child_process(0),
file(_file), process(_process),
json_kind(_kind),
file_created_by(0),
next_in_process(0), next_on_file(0)
{
Action **ref_action_in_process = &process->actions;
while (*ref_action_in_process != 0) ref_action_in_process = &(*ref_action_in_process)->next_in_process;
*ref_action_in_process = this;
if (file != 0)
{
Action **ref_action_on_file = &file->actions;
while (*ref_action_on_file != 0) ref_action_on_file = &(*ref_action_on_file)->next_on_file;
*ref_action_on_file = this;
}
}
const char *oper_name()
{
return kind == 'e' ? "Executes" :
kind == 'r' ? "Delete" :
is_produced() ? "Produces" :
kind != 'o' ? 0 :
o_rdonly ? "Uses as input" :
o_wronly ? "Writes" :
o_rdwr ? "Modifies" :
"Uses";
}
bool is_input() { return kind == 'o' && !is_produced() && o_rdonly; }
bool is_produced() { return kind == 'o' && (o_creat || ((o_wronly || o_rdwr) && o_trunc)); }
};
bool Process::hasInputUseOf(File *f)
{
for (Action *action = actions; action != 0; action = action->next_in_process)
if (action->file == f && action->o_rdonly)
return true;
return false;
}
Action *Process::lastOpenAction(int handle)
{
Action *last_open_action = 0;
for (Action *action = actions; action != 0; action = action->next_in_process)
if (action->kind == 'o' && action->file_handle == handle)
last_open_action = action;
return last_open_action;
}
#define NR_MAPPIGS 21
struct
{
const char *from;
const char *to;
bool has_url;
} source_mapping[NR_MAPPIGS] = {
{"bootstrap-seeds/POSIX/x86/kaem-optional-seed", "src/kaem-minimal_s", false},
{"bootstrap-seeds/POSIX/x86/hex0-seed", "src/hex0_s", false},
{"kaem.x86", "task3/kaem.x86", true},
{"x86/tools-seed-kaem.kaem", "task3/tools-seed-kaem.kaem", true},
{"x86/tools-mini-kaem.kaem", "task3/tools-mini-kaem.kaem", true},
{"x86/check-tools.kaem", "task3/check-tools.kaem", true},
{"x86/tools-kaem.kaem", "task3/tools-kaem.kaem", true},
{"x86/after.kaem", "task3/after.kaem", true},
{"x86/hex0_s.hex0", "src/hex0_s.hex0", false},
{"x86/kaem-minimal_s.hex0", "src/kaem-minimal_s.hex0", false},
{"x86/hex2_s.hex0", "src/hex2_s.hex0", false},
{"x86/blood-elf_s.macro", "src/blood-elf_s.macro", false},
{"x86/blood-elf_s.blood_elf", "src/blood-elf_s.blood_elf", false},
{"x86/M1_s.macro", "src/M1_s.macro", false},
{"x86/M1_s.blood_elf", "src/M1_s.blood_elf", false},
{"x86/stack_c_s.M1", "src/stack_c_s.M1", false},
{"x86/stack_c_intro.M1", "src/stack_c_intro.M1", true},
{"x86/ELF-x86-debug.hex2", "M2libc/x86/ELF-x86-debug.hex2", true},
{"seed.kaem", "task3/seed.kaem", true},
{"configurator.x86.checksums", "task3/configurator.x86.checksums", true},
{"script-generator.x86.checksums", "task3/script-generator.x86.checksums", true},
};
void File::init_source()
{
if (actions == 0 || actions->next_on_file != 0)
return;
if (actions->kind == 'o' && actions->is_produced())
{
if (actions->process->actions->kind == 'e' && strcmp(actions->process->actions->file->name, "/usr/bin/untar") == 0)
{
actions->from_archive = true;
url = get_url(name, dist_subModules);
}
}
else if (actions->kind == 'e' || actions->kind == 'o')
{
is_source = true;
bool has_url = true;
char *n = name;
if (n[0] == '/')
n++;
for (int i = 0; i < NR_MAPPIGS; i++)
if (strcmp(n, source_mapping[i].from) == 0)
{
source_name = copystr(source_mapping[i].to);
has_url = source_mapping[i].has_url;
break;
}
if (source_name == NULL)
{
if (strncmp(n, "src/", 4) == 0)
source_name = copystr(n);
else if (strncmp(n, "external/distfiles/", 19) == 0)
{
char buffer[200];
sprintf(buffer, "task3/%s", n + 8);
source_name = copystr(buffer);
}
else if (strncmp(n, "steps/", 6) == 0)
{
char buffer[200];
sprintf(buffer, "task3/%s", n);
source_name = copystr(buffer);
}
}
/*
if (source_name == NULL)
{
if (strncmp(n, "external/distfiles/", 19) == 0)
n += 9;
static const char *paths[] = { "replacement/", "*seed/", "*seed/stage0-posix/", "*"};
for (size_t i = 0; i < sizeof(paths)/sizeof(paths[0]); i++)
{
char poss_source_name[MAX_FILENAME_LEN];
if (paths[i][0] == '*')
{
strcpy(poss_source_name, source_dir);
strcat(poss_source_name, paths[i] + 1);
}
else
strcpy(poss_source_name, paths[i]);
strcat(poss_source_name, n);
if (access(poss_source_name, R_OK) == 0)
{
source_name = copystr(poss_source_name);
break;
}
}
}
*/
if (source_name != 0 && has_url)
url = get_url(source_name + len_source_dir, lbs_subModules);
}
}
bool File::exec_before_created()
{
bool is_created = false;
for (Action *action = actions; action != 0; action = action->next_on_file)
if (action->kind == 'o' && action->o_creat && !action->from_archive)
is_created = true;
else if (action->kind == 'r')
is_created = false;
else if (action->kind == 'e' && !is_created)
return true;
return false;
}
bool File::used_as_input()
{
return actions != 0 && (actions->o_rdonly || actions->o_rdwr);
}
bool File::produced_and_not_removed()
{
if (used_as_input())
return false;
bool is_created = false;
for (Action *action = actions; action != 0; action = action->next_on_file)
if (action->kind == 'o' && (action->o_creat || action->o_wronly || (action->o_rdwr && action->o_trunc)) && !action->from_archive)
is_created = true;
else if (action->kind == 'r')
is_created = false;
else if (action->kind == 'e' && !is_created)
return false;
return is_created;
}
// ----------------------------------
bool accept_string(const char *str, char *&s)
{
char *t = s;
while (*str != '\0' && *t != '\0')
{
if (*str != *t)
return false;
t++;
if (*str == ' ')
{
while (*t == ' ')
t++;
}
str++;
}
s = t;
return true;
}
bool parse_filename(char *filename, char *&s)
{
if (*s != '"')
return false;
s++;
for (int i = 0; i < MAX_FILENAME_LEN; i++)
{
if (*s == '"')
{
filename[i] = '\0';
s++;
return true;
}
while (s[0] == '/' && s[1] == '/')
s++;
filename[i] = *s++;
}
fprintf(fout, "file name too long\n");
exit(-1);
return false;
}
char cd_path[MAX_FILENAME_LEN] = "/";
void add_cd_path(char *filename)
{
char buf[2*MAX_FILENAME_LEN+1];
//fprintf(log_file, "add_cd_path %s %s => ", cd_path, filename);
if (filename[0] == '/')
{
char *s = filename;
while (s[1] == '/')
s++;
strcpy(buf, s);
//fprintf(fout, "add_cd_path %s %s => %s\n", cd_path, filename, buf);
strcpy(filename, buf);
return;
}
strcpy(buf, cd_path);
int i = strlen(buf);
while (i > 0 && buf[i-1] == '/')
i--;
char *f = filename;
while (f[0] != '\0')
{
if (f[0] == '.' && (f[1] == '\0' || f[1] == '/'))
{
f++;
while (f[0] == '/')
f++;
}
else if (f[0] == '.' && f[1] == '.' && (f[2] == '\0' || f[2] == '/'))
{
f += 2;
while (f[0] == '/')
f++;
while (i > 0 && buf[i-1] != '/')
i--;
while (i > 0 && buf[i-1] == '/')
i--;
}
else
{
buf[i++] = '/';
while (f[0] != '\0' && f[0] != '/')
buf[i++] = *f++;
while (f[0] == '/')
f++;
}
}
buf[i] = '\0';
if (i > MAX_FILENAME_LEN)
{
fprintf(fout, "add_cd_path reached lengt %d\n", i);
exit(1);
}
//fprintf(fout, "add_cd_path %s %s => %s\n", cd_path, filename, buf);
strcpy(filename, buf);
//fprintf(log_file, "%s\n", filename);
}
void read_filename(char *filename, char *&s)
{
if (!parse_filename(filename, s))
{
fprintf(fout, "Failed to parse filename from '%s'\n", s);
exit(0);
}
add_cd_path(filename);
}
bool accept_openat(char *&s)
{
char *s2 = s;
if (strncmp(s2, "openat(", 7) != 0)
return false;
s2 += 7;
if (strncmp(s2, "AT_FDCWD", 8) == 0)
s2 += 8;
else
while ('0' <= *s2 && *s2 <= '9')
s2++;
if (strncmp(s2, ", ", 2) != 0)
return false;
s = s2 + 2;
return true;
}
#define NR_PARR_COMMANDS 4
bool process_trace_file(const char *trace_fn)
{
FILE *f = fopen(trace_fn, "r");
char buffer[10000];
struct Command
{
bool active;
unsigned long pid;
char cmd[10000];
};
Command cmd[NR_PARR_COMMANDS];
for (int i = 0; i < NR_PARR_COMMANDS; i++)
cmd[i].active = false;
long line_nr = 0;
bool skip_first = true;
while (fgets(buffer, 9999, f))
{
line_nr++;
int len = strlen(buffer);
if (len > 0 && buffer[len-1] != '\n')
{
printf("Line '%s' does not end with newline\n", buffer);
return false;
}
if (skip_first && strstr(buffer, "kaem-optional-seed") == 0)
continue;
skip_first = false;
//fprintf(fout, "Line: %s", buffer);
char filename[MAX_FILENAME_LEN+1];
char *s = buffer;
unsigned long pid = read_unsigned_long(s);
Process *process = find_process(pid);
if (process == NULL)
{
printf("Line %ld: Did not process for %lu\n", line_nr, pid);
process = next_process(pid);
}
while (*s == ' ' || *s == '\t')
s++;
char *command = s;
//fprintf(fout, "%lu: %s", pid, s);
if (strncmp(s, "<... ", 5) == 0)
{
printf("DEBUG: resumd\n");
char *ns = strstr(s, "resumed>");
if (ns == 0)
{
printf("Line '%s' expect 'resumed>'\n", buffer);
return false;
}
s = ns + 8;
bool found = false;
for (int i = 0; i < NR_PARR_COMMANDS; i++)
if (cmd[i].active && cmd[i].pid == pid)
{
printf("DEBUG: more resumed: '%s'\n", s);
strcat(cmd[i].cmd, s);
printf("DEBUG: makes: '%s'\n", cmd[i].cmd);
char *s_unf = strstr(cmd[i].cmd, " <unfinished ...>");
if (s_unf != 0)
{
*s_unf = '\0';
s = 0;
}
else
{
cmd[i].active = false;
s = cmd[i].cmd;
}
found = true;
break;
}
if (!found)
{
printf("Line: '%s' is not correct continuation\n", buffer);
return false;
}
}
else if (strstr(s, " <unfinished ...>") != 0)
{
bool found = false;
for (int i = 0; i < NR_PARR_COMMANDS; i++)
if (!cmd[i].active)
{
cmd[i].active = true;
cmd[i].pid = pid;
strcpy(cmd[i].cmd, s);
char *s_unf = strstr(cmd[i].cmd, " <unfinished ...>");
if (s_unf != 0)
{
*s_unf = '\0';
s = 0;
}
printf("DEBUG: Unfinshed %lu: '%s'\n", pid, cmd[i].cmd);
found = true;
break;
}
if (!found)
{
printf("Line: '%s' too many parralel commands. Increase NR_PARR_COMMANDS\n", buffer);
return false;
}
}
if (s == 0)
{
// nothing to process
}
else if (accept_string("execve(", s))
{
read_filename(filename, s);
File *exec_file = get_file(filename);
new Action(exec_file, process, 'e');
if (strcmp(filename, "/usr/bin/tcc-boot0") == 0)
{
fprintf(fout, "Stop at %lu: %s\n", pid, s);
break;
}
exec_file->init_source();
}
else if (accept_string("open(", s) || accept_openat(s))
{
read_filename(filename, s);
//fprintf(fout, "open %s", s);
bool o_rdonly = false;
bool o_wronly = false;
bool o_rdwr = false;
bool o_creat = false;
bool o_trunc = false;
bool o_excl = false;
if (!accept_string(", ", s))
fprintf(fout, "Expecting ', at '%s'\n", s);
for (;*s != '\0'; s++)
{
if (accept_string("O_RDONLY", s))
o_rdonly = true;
else if (accept_string("O_WRONLY", s))
o_wronly = true;
else if (accept_string("O_RDWR", s))
o_rdwr = true;
else if (accept_string("O_CREAT", s))
o_creat = true;
else if (accept_string("O_TRUNC", s))
o_trunc = true;
else if (accept_string("O_EXCL", s))
o_excl = true;
else if ( accept_string("O_NONBLOCK", s) || accept_string("O_CLOEXEC", s)
|| accept_string("O_DIRECTORY", s) || accept_string("O_NOCTTY", s)
|| accept_string("O_PATH", s) || accept_string("O_NOFOLLOW", s))
;
else
{
fprintf(fout, "Unknown %s", s);
break;
}
if (*s == ',')
break;
if (*s != '|')
break;
}
unsigned long mode = 0;
if (accept_string(", ", s))
{
mode = read_unsigned_long(s);
}
if (!accept_string(") = ", s))
{
fprintf(fout, "Expecting ') = ' at '%s'\n", s);
return false;
}
long handle = read_long(s);
//if (*s != '\n')
// fprintf(fout, "open end with '%s'\n", s);
if ((o_rdonly ? 1 : 0) + (o_wronly ? 1 : 0) + (o_rdwr ? 1 : 0) != 1)
fprintf(fout, "Warning: Open '%s' as undefined read/write mode\n", filename);
if (handle > -1)
{
File *file = get_file(filename);
Action *action = new Action(file, process, 'o');
action->file_handle = handle;
action->o_rdonly = o_rdonly;
action->o_wronly = o_wronly;
action->o_rdwr = o_rdwr;
action->o_creat = o_creat;
action->o_trunc = o_trunc;
action->o_excl = o_excl;
if (o_creat)
action->mode = mode;
file->init_source();
}
}
else if (accept_string("close(", s))
{
unsigned long handle = read_unsigned_long(s);
if (*s != ')')
fprintf(fout, "Expecting ')' at '%s'\n", s);
Action *last_open_action = process->lastOpenAction(handle);
if (last_open_action == 0)
fprintf(fout, "Error: Handle %ld not opened by process %d\n", handle, process->nr);
else if (last_open_action->is_closed)
fprintf(fout, "Warning: File %s already closed for process %d\n", last_open_action->file->name, process->nr);
else
last_open_action->is_closed = true;
}
else if (accept_string("chmod(", s))
{
read_filename(filename, s);
unsigned long mode = 0;
if (accept_string(", ", s))
{
mode = read_unsigned_long(s);
}
if (*s != ')')
{
fprintf(fout, "Expecting ')' at '%s'\n", s);
return false;
}
File *file = get_file(filename);
Action *action = new Action(file, process, 'c');
action->mode = mode;
}
else if (accept_string("chdir(", s))
{
read_filename(filename, s);
if (!accept_string(") = ", s))
{
fprintf(fout, "Expecting ') = ' at '%s'\n", s);
return false;
}
long result = read_long(s);
//if (!accept_string("-1 ENOENT (No such file or directory)", s))
// result = read_unsigned_long(s);
if (result == 0)
strcpy(cd_path, filename);
}
else if (accept_string("unlink(", s))
{
read_filename(filename, s);
if (*s != ')')
fprintf(fout, "Expecting ')' at '%s'\n", s);
File *file = get_file(filename);
new Action(file, process, 'r');
}
else if (accept_string("fork(", s))
{
if (!accept_string(") = ", s))
{
fprintf(fout, "Expecting ') = ' at '%s'\n", s);
return false;
}
long new_pid = read_unsigned_long(s);
if (*s != '\n')
fprintf(fout, "fork end with '%s'\n", s);
Process *new_process = next_process(new_pid);
//fprintf(fout, "fork created %lu %lu\n", new_pid, new_process->pid);
new_process->parent = process;
Action *action = new Action(0, process, 'E');
action->child_process = new_process;
}
else if (accept_string("+++ exited with ", s))
{
}
else if (accept_string("--- SIGCHLD ", s))
{
}
else if (accept_string("--- SIGWINCH ", s))
{
}
else if (accept_string("fcntl(", s))
{
// just ignore
}
else
{
fprintf(fout, "Unknown: '%s'\n", command);
break;
}
}
fclose(f);
return true;
}
// ----------------------------------------------------
class Source
{
public:
const char *url;
Source *next;
Source(const char *u, Source *n) : url(u), next(n) {}
};
void collect_sources(Process *process, Source **ref_sources)
{
//indent(fout); fprintf(fout, "Process %d\n", process->nr);
//indent_depth += 4;
for (Action *action = process->actions; action != 0; action = action->next_in_process)
{
if (action->kind == 'o' && (action->o_rdonly || (action->o_rdwr && !action->o_trunc)))
{
File *file = action->file;
if (file->url != 0)
{
const char *url = file->url;
//indent(fout); fprintf(fout, "Found %s\n", url);
Source **ref_source = ref_sources;
while (*ref_source != 0 && strcmp((*ref_source)->url, url) < 0)
ref_source = &(*ref_source)->next;
if (*ref_source == 0 || strcmp((*ref_source)->url, url) > 0)
*ref_source = new Source(url, *ref_source);
}
else
{
Process *produced_by = 0;
for (Action *file_action = file->actions; file_action != 0; file_action = file_action->next_on_file)
if (file_action->process == process)
break;
else if (file_action->kind == 'r')
produced_by = 0;
else if (file_action->is_produced())
produced_by = file_action->process;
if (produced_by != 0)
collect_sources(produced_by, ref_sources);
}
}
}
//indent_depth -= 4;
}
bool include_source = false;
void output_file(FILE *f, FILE *f_source, bool binary)
{
if (f_source == 0) return;
fprintf(f, "<PRE>");
if (binary)
{
int i = 0;
unsigned char ch = fgetc(f_source);
while (!feof(f_source))
{
fprintf(f, " %02X", ch);
if (++i % 10 == 0)
fprintf(f, "\n");
ch = fgetc(f_source);
}
}
else
{
char ch = fgetc(f_source);
if (ch != -1)
{
int col = 0;
while (!feof(f_source))
{
col++;
if (ch == '<')
fprintf(f, "<");
else if (ch == '>')
fprintf(f, ">");
else if (ch == '&')
fprintf(f, "&");
else if ((unsigned char)ch == 160)
fprintf(f, " ");
else if ((unsigned char)ch == 169)
fprintf(f, "©");
else if ((unsigned char)ch == 194)
fprintf(f, "Â");
else if ((unsigned char)ch == 195)
fprintf(f, "Ã");
else if ((unsigned char)ch == 197)
fprintf(f, "Å");
else if ((unsigned char)ch == 216)
fprintf(f, "Ø");
else if ((unsigned char)ch == 231)
fprintf(f, "ç");
else if ((unsigned char)ch == 246)
fprintf(f, "ö");
else if (ch < 0)
fprintf(f, "&#%d;", (unsigned char)ch);
else if (ch == '\n' || ch == 12)
{
fprintf(f, "\n");
col = 0;
}
else if (ch == '\t')
{
fprintf(f, " ");
while (col % 4 > 0)
{
fprintf(f, " ");
col++;
}
}
else if (ch < ' ')
; // skip control characters
else
fprintf(f, "%c", ch);
ch = fgetc(f_source);
}
}
}
fprintf(f, "</PRE>");
fclose(f_source);
}
void write_html_file(FILE *f, File *file, bool binary)
{
fprintf(f, "<H3><A NAME=\"F%d\">File %s</A></H3>\n\n<UL>\n", file->nr, file->name);
for (Action *action = file->actions; action != 0; action = action->next_on_file)
{
if (action->kind == 'r')
break;
if (action->kind == 'e')
fprintf(f, "<LI>Executed in <A HREF=\"#S%d\">Process %d</A>\n", action->process->nr, action->process->nr);
if (action->kind == 'o')
{
if (action->o_wronly || action->o_rdwr)
break;
if (action->o_rdonly)
fprintf(f, "<LI>Input for <A HREF=\"#S%d\">Process %d</A>\n", action->process->nr, action->process->nr);
}
}
fprintf(f, "</UL>\n\n");
FILE *f_source = fopen(file->source_name, "r");
if (f_source == 0)
{
fprintf(f, "(Source not found at '%s')\n", file->source_name);
return;
}
//if (strncmp(file->source_name, source_dir, len_source_dir) == 0)
// fprintf(f, "Live-bootstrap source file is '%s'.<BR>\n", file->source_name + len_source_dir);
//else
fprintf(f, "Source file is '%s'.<BR>\n", file->source_name);
if (file->url != 0)
{
fprintf(f, "URL: <A HREF=\"%s\">%s</A>\n", file->url, file->url);
//fprintf(fout, "Source: %s, URL: %s\n", file->source_name, file->url);
}
else
fprintf(f, "<B>No URL</B>\n");
size_t len = strlen(file->source_name);
if ( (len > 7 && strcmp(file->source_name + len - 7, ".tar.gz") == 0)
|| (len > 8 && strcmp(file->source_name + len - 8, ".tar.bz2") == 0))
{
fprintf(f, "(Not shown)\n");
fclose(f_source);
return;
}
output_file(f, f_source, binary);
}
void write_html(FILE *f)
{
fprintf(f,
"<HTML><HEAD>\n<TITLE>MES-replacement listing</TITLE>\n"
"</HEAD><BODY>\n\n<H1>MES-replacement listing</H1>"
"<!--ONEWAY-->\n"
"This page gives all the steps that are taken to arrive at <tt>tcc-boot0</tt>\n"
"executable that is similar to the one in the <A HREF=\"https://github.com/fosslinux/live-bootstrap\"\n"
">fosslinux/live-bootstrap</A> project for this project, which does not rely on\n"
"the GNU Mes compiler. (The header files and the source for a standard library\n"
"that are part of the GNU Mes compiler, are used.)\n"
"<p>"
"This page is generated the <A HREF=\"https://github.com/FransFaase/MES-replacement/tree/%s/scan_trace.cpp\"\n"
"><TT>scan_trace.cpp</TT></A>, which parses the <TT>trace.txt</TT> file that is produced by\n"
"running the <A HREF=\"https://github.com/FransFaase/MES-replacement/blob/main/task3.sh\"\n"
"><TT>task3.sh</TT></A> Bash script (where the line with the <tt>chroot</tt> command is uncommented)\n"
"for the commit <A HREF=\"https://github.com/FransFaase/MES-replacement/tree/%s\">\n"
"<tt>%.8s</TT></A>.\n"
"<P>\n"
"<UL>\n"
"<LI><A HREF=\"#Seeds\">Binary seeds files</A>\n"
"<LI><A HREF=\"#Processes\">Processes</A>\n"
"<LI><A HREF=\"#Input\">Input source files</A>\n"
"<LI><A HREF=\"#Output\">Output files</A>\n"
"<LI><A HREF=\"#Parser\">Parse program</A>\n"
"</UL>\n", live_bootstrap_commit, live_bootstrap_commit, live_bootstrap_commit);
fprintf(f, "\n\n<H2><A NAME=\"Seeds\">Binary seeds files</A></H2>\n\n");
for (File *file = files; file != 0; file = file->next)
if (file->exec_before_created())
write_html_file(f, file, true);
fprintf(f, "\n<H2><A NAME=\"Processes\">Processes</A></H2>\n\n");
for (Process *process = all_processes; process != 0; process = process->next)
{
fprintf(f, "<H3><A NAME=\"S%d\">Process %d</A></H3>\n\n", process->nr, process->nr);
if (process->parent != 0)
fprintf(f, "(Executed by <A HREF=\"#S%d\">Process %d</A>)\n", process->parent->nr, process->parent->nr);
fprintf(f, "<UL>\n");
for (Action *action = process->actions; action != 0; action = action->next_in_process)
{
if (action->kind == 'E' && action->child_process != 0)
{
fprintf(f, "<LI>Executes <A HREF=\"#S%d\">Process %d</A>\n", action->child_process->nr, action->child_process->nr);
}
else
{
const char *oper = action->oper_name();
if (oper != 0)
{
bool repeated = false;
for (Action *prev_action = process->actions; prev_action != action; prev_action = prev_action->next_in_process)
if (prev_action->kind == 'o' && prev_action->file == action->file && prev_action->oper_name() == oper)
{
repeated = true;
break;
}
if (!repeated)
{
File *file = action->file;
fprintf(f, "<LI>%s ", oper);
if (action->is_produced())
{
fprintf(f, "%s\n<UL>\n", file->name);
for (Action *file_action = action->next_on_file; file_action != 0; file_action = file_action->next_on_file)
if (file_action->kind == 'r')
{
fprintf(f, "<LI>Deleted by <A HREF=\"#S%d\">process %d</A>\n", file_action->process->nr, file_action->process->nr);
break;
}
else if (file_action->kind == 'o' && (file_action->o_creat || ((file_action->o_wronly || file_action->o_rdwr) && file_action->o_trunc)))
break;
else if (file_action->kind == 'e' || file_action->o_rdonly)
fprintf(f, "<LI>%s <A HREF=\"#S%d\">process %d</A>\n",
file_action->kind == 'e' ? "Used as executable" :
file_action->kind == 'o' ? (file_action->o_rdonly ? "Used as input" : file_action->o_wronly ? "Produced by" : file_action->o_rdwr ? "Modified by" : "Modified by") :
"Used in",
file_action->process->nr, file_action->process->nr);
fprintf(f, "</UL>\n\n");
}
else
{
Process *produced_by = 0;
for (Action *file_action = file->actions; file_action != 0; file_action = file_action->next_on_file)
if (file_action->process == process)
break;
else if (file_action->kind == 'r')
produced_by = 0;
else if (file_action->is_produced())
produced_by = file_action->process;
if (file->is_source)
fprintf(f, "<A HREF=\"#F%d\">%s</A>", file->nr, file->name);
else
fprintf(f, "%s", action->file->name);
File *file_copy_from = file;
while (file_copy_from->copy_from != 0)
file_copy_from = file_copy_from->copy_from;
if (file_copy_from->url != 0)
{
fprintf(f, " from <A HREF=\"%s\">source</A>", file_copy_from->url);
if (file != file_copy_from)
fprintf(f, " (through copy)");
if (produced_by)
fprintf(f, " (produced by <A HREF=\"#S%d\">process %d</A>)", produced_by->nr, produced_by->nr);
}
else if (produced_by != 0)
fprintf(f, " produced by <A HREF=\"#S%d\">process %d</A>", produced_by->nr, produced_by->nr);
fprintf(f, "\n");
}
}
}
}
}
fprintf(f, "</UL>\n\n");
if (process->nr == 731)
{
Source *sources = 0;
//fprintf(fout, "Process %d\n", process->nr);
collect_sources(process, &sources);
fprintf(f, "<P>Sources used:\n<UL>\n");
for (Source *source = sources; source != 0; source = source->next)
fprintf(f, "<LI> %s\n", source->url);
fprintf(f, "</UL>\n");
}
}
fprintf(f, "<H2><A NAME=\"Input\">Input source files</A></H2>\n\n");
for (File *file = files; file != 0; file = file->next)
if (file->used_as_input()) //(file->is_source && !file->exec_before_created())
write_html_file(f, file, false);
fprintf(f, "\n<H2><A NAME=\"Output\">Output files</A></H2>\n\n\n");
for (int t = 0; t < 3; t++)
{
switch (t)
{
case 0: fprintf(f, "Executables files:\n<UL>\n"); break;
case 1: fprintf(f, "Intermediary files (not from sources and used):\n<UL>\n"); break;
case 2: fprintf(f, "Produced (not from source and also not used):\n<UL>\n"); break;
}
for (File *file = files; file != 0; file = file->next)
if (!file->used_as_input() && !file->exec_before_created())
{
bool used = false;
bool executed = false;
unsigned long mode = 0;
int process_nr = -1;
for (Action *action = file->actions; action != 0; action = action->next_on_file)
{
if (action->kind == 'e')
executed = true;
else if (action->kind == 'o')
{
if (action->o_creat || action->o_wronly)
{
mode = action->mode;
process_nr = action->process->nr;
}
else if (action->o_rdonly || (action->o_rdwr && !action->o_trunc))
used = true;
}
else if (action->kind == 'r')
{
used = false;
executed = false;
process_nr = -1;
}
else if (action->kind == 'c')
{
mode = action->mode;
}
}
if (process_nr != -1)
{
bool is_executable = (mode & 0700) == 0700;
if ( (t == 0 && is_executable)
|| (t == 1 && file->url == 0 && !is_executable && used)
|| (t == 2 && file->url == 0 && !is_executable && !used))
{
fprintf(f, "<LI> %s", file->name);
if (process_nr > 0)
fprintf(f, " produced by <A HREF=\"#S%d\">Process %d</A>", process_nr, process_nr);
if (mode != 0 && mode != 0600 && mode != 0700)
fprintf(f, " (mode is %lo)", mode);
if (executed)
fprintf(f, " (also executed)");
fprintf(f, "\n");
}
}
}
fprintf(f, "</UL>\n\n");
}
fprintf(f, "\n<H2><A NAME=\"Parser\">Parse program</A></H2>\n\n");
fprintf(f, "Below the Bash script <TT>task3.sh</TT> to produce the <TT>trace.txt</TT> file.\n"
"(The line with <tt>chroot</TT> should be uncommented.)<P>\n");
output_file(f, fopen("task3.sh", "r"), false);
fprintf(f, "Below the version of the <TT>scan_trace.cpp</TT> program is given that is used to produce this page.\n<P>\n");
output_file(f, fopen("scan_trace.cpp", "r"), false);
fprintf(f,
"\n\n"
"<P><HR>\n"
"<ADDRESS>\n"
"<A HREF=\"index.html\">Home</A>\n"
"</ADDRESS>\n"
"</BODY></HTML>\n");
}
bool only_graph = false;
void write_json(FILE *f)
{
// calculate json_kind and file_created_by
for (File *file = files; file != 0; file = file->next)
{
bool file_exists = false;
Process *file_created_by = 0;
for (Action *action = file->actions; action != 0; action = action->next_on_file)
{
if (action->kind == 'r')
file_exists = false;
else if (action->kind == 'o')
{
if (action->o_rdonly)
action->json_kind = 'R';
else if (!file_exists || action->o_wronly)
{
action->json_kind = 'W';
file_exists = true;
file_created_by = action->process;
}
else
action->json_kind = 'M';
}
action->file_created_by = file_created_by;
}
}
fprintf(f, "var data = {\n processes:[\n");
for (Process *process = all_processes; process != 0; process = process->next)
{
fprintf(f, "\t{ nr:%d, x:null, y:0, w:0, h:0, ie:\"\", iw:0, oe:\"\", ow:0, elf:null, ins:[], outs:[]", process->nr);
if (process->parent != 0)
fprintf(f, ", parent:%d", process->parent->nr);
fprintf(f, ", actions:[");
bool first = true;
bool is_M2_Mesoplanet = false;
for (Action *action = process->actions; action != 0; action = action->next_in_process)
{
// Some clean-up for M2_Mesoplanet driver program
if (action->kind == 'e' && (strcmp(action->file->name, "/x86/bin/M2-Mesoplanet") == 0 || strcmp(action->file->name, "/usr/bin/M2-Mesoplanet") == 0))
is_M2_Mesoplanet = true;
if (is_M2_Mesoplanet)
{
if (action->json_kind == 'W' && strstr(action->file->name, "/M2-Mesoplanet-000000") == 0)
continue;
if (action->json_kind == 'R' && action->next_in_process != 0 && action->next_in_process->kind == 'E')
continue;
}
if ( action->json_kind == 'R' && action->next_in_process != 0 && action->next_in_process->kind == 'E'
&& action->next_on_file != 0 && action->next_on_file->kind == 'e'
&& action->next_in_process->child_process == action->next_on_file->process)
continue;
if (action->json_kind == 'R')
{
bool already_include = false;
for (Action *prev_action = process->actions; prev_action != action; prev_action = prev_action->next_in_process)
if (prev_action->json_kind == 'R' && prev_action->file == action->file)
{
already_include = true;
break;
}
if (already_include)
continue;
}
fprintf(f, "%s%s{ kind:\"%c\"", first ? "" : ",", only_graph ? "" : "\n\t\t", action->json_kind);
if (action->file != 0)
{
fprintf(f, ", file:%d", action->file->nr);
if (action->file_created_by != 0)
fprintf(f, ", by:%d", action->file_created_by->nr);
}
if (action->child_process != 0)
fprintf(f, ", child:%d", action->child_process->nr);
fprintf(f, " }");
first = false;
}
fprintf(f, "%s}%s\n", only_graph ? "]" : first ? "] \n" : "\n\t ]\n\t", process->next != 0 ? "," : "");
}
fprintf(f, " ],\n files:[\n");
for (File *file = files; file != 0; file = file->next)
{
fprintf(f, "\t{ nr:%d, name:\"%s\", type:\"%s\", x:null, y:0, label:\"\", w:0", file->nr, file->name,
file->exec_before_created() ? "seed" : "");
if (!only_graph)
{
if (file->is_source && file->source_name != 0)
fprintf(f, ", src:\"%s\"",
file->source_name /*+ (strncmp(file->source_name, source_dir, len_source_dir) == 0 ? len_source_dir : 0)*/);
if (file->url != 0)
fprintf(f, ", url:\"%s\"", file->url);
if (file->copy_from != 0)
fprintf(f, ", copy_from:%d", file->copy_from->nr);
}
fprintf(f, ", actions:[");
bool first = true;
Action *prev_action = 0;
for (Action *action = file->actions; action != 0; action = action->next_on_file)
{
if (prev_action == 0 || action->json_kind != prev_action->json_kind || action->process->nr != prev_action->process->nr)
{
fprintf(f, "%s%s{ kind:\"%c\", proc:%d }", first ? "" : ",", only_graph ? "" : "\n\t\t", action->json_kind, action->process->nr);
first = false;
}
prev_action = action;
}
fprintf(f, "%s]", only_graph || first ? "" : "\n\t ");
if (file->is_source && file->source_name != 0 && !only_graph)
{
size_t len = strlen(file->source_name);
if ( (len <= 7 || strcmp(file->source_name + len - 7, ".tar.gz") != 0)
&& (len <= 8 || strcmp(file->source_name + len - 8, ".tar.bz2") != 0))
{
FILE *f_source = fopen(file->source_name, "r");
if (f_source != 0)
{
fprintf(f, ",\n\t lines:[\n");
if (file->exec_before_created())
{
fprintf(f, "\t\t\"");
int i = 0;
unsigned char ch = fgetc(f_source);
while (!feof(f_source))
{
if (i == 10)
{
fprintf(f, "\",\n\t\t\"");
i = 0;
}
fprintf(f, "%s%02X", i == 0 ? "" : " ", ch);
i++;
ch = fgetc(f_source);
}
fprintf(f, "\"\n");
}
else
{
char ch = fgetc(f_source);
bool first = true;
if (ch != -1)
{
int col = 0;
bool in_line = false;
while (!feof(f_source))
{
if (ch == '\n' && in_line)
{
fprintf(f, "\"");
in_line = false;
ch = fgetc(f_source);
col = 0;
continue;
}
if (!in_line)
{
fprintf(f, "%s\t\t\"", first ? "" : ",\n");
first = false;
if (ch == '\n')
{
fprintf(f, "\"");
ch = fgetc(f_source);
continue;
}
in_line = true;
}
if (ch < ' ' && ch != '\t')
{
ch = fgetc(f_source);
continue;
}
col++;
if (ch == '"')
fprintf(f, "\\" "\"");
else if (ch == '\\')
fprintf(f, "\\\\");
else if (ch == '<')
fprintf(f, "<");
else if (ch == '>')
fprintf(f, ">");
else if (ch == '&')
fprintf(f, "&");
else if ((unsigned char)ch == 160)
fprintf(f, " ");
else if ((unsigned char)ch == 169)
fprintf(f, "©");
else if ((unsigned char)ch == 194)
fprintf(f, "Â");
else if ((unsigned char)ch == 195)
fprintf(f, "Ã");
else if ((unsigned char)ch == 197)
fprintf(f, "Å");
else if ((unsigned char)ch == 216)
fprintf(f, "Ø");
else if ((unsigned char)ch == 231)
fprintf(f, "ç");
else if ((unsigned char)ch == 246)
fprintf(f, "ö");
else if (ch < 0)
fprintf(f, "&#%d;", (unsigned char)ch);
else if (ch == '\t')
{
fprintf(f, " ");
while (col % 4 != 0)
{
fprintf(f, " ");
col++;
}
}
else
fprintf(f, "%c", ch);
ch = fgetc(f_source);
}
if (col > 0)
fprintf(f, "\"\n");
}
}
fprintf(f, "\t ]\n");
}
}
}
fprintf(f, "%s}", first && !file->is_source ? " " : "\t");
fprintf(f, "%s\n", file->next != 0 ? "," : "");
}
fprintf(f, " ]\n");
fprintf(f, "}\n");
return;
for (Process *process = all_processes; process != 0; process = process->next)
{
fprintf(f, "<H3><A NAME=\"S%d\">Process %d</A></H3>\n\n", process->nr, process->nr);
if (process->parent != 0)
fprintf(f, "(Executed by <A HREF=\"#S%d\">Process %d</A>)\n", process->parent->nr, process->parent->nr);
fprintf(f, "<UL>\n");
if (process->nr == 731)
{
Source *sources = 0;
//fprintf(fout, "Process %d\n", process->nr);
collect_sources(process, &sources);
fprintf(f, "<P>Sources used:\n<UL>\n");
for (Source *source = sources; source != 0; source = source->next)
fprintf(f, "<LI> %s\n", source->url);
fprintf(f, "</UL>\n");
}
}
fprintf(f, "<H2><A NAME=\"Input\">Input source files</A></H2>\n\n");
for (File *file = files; file != 0; file = file->next)
if (file->used_as_input()) //(file->is_source && !file->exec_before_created())
write_html_file(f, file, false);
fprintf(f, "\n<H2><A NAME=\"Output\">Output files</A></H2>\n\n\n");
for (int t = 0; t < 3; t++)
{
switch (t)
{
case 0: fprintf(f, "Executables files:\n<UL>\n"); break;
case 1: fprintf(f, "Intermediary files (not from sources and used):\n<UL>\n"); break;
case 2: fprintf(f, "Produced (not from source and also not used):\n<UL>\n"); break;
}
for (File *file = files; file != 0; file = file->next)
if (!file->used_as_input() && !file->exec_before_created())
{
bool used = false;
bool executed = false;
unsigned long mode = 0;
int process_nr = -1;
for (Action *action = file->actions; action != 0; action = action->next_on_file)
{
if (action->kind == 'e')
executed = true;
else if (action->kind == 'o')
{
if (action->o_creat || action->o_wronly)
{
mode = action->mode;
process_nr = action->process->nr;
}
else if (action->o_rdonly || (action->o_rdwr && !action->o_trunc))
used = true;
}
else if (action->kind == 'r')
{
used = false;
executed = false;
process_nr = -1;
}
else if (action->kind == 'c')
{
mode = action->mode;
}
}
if (process_nr != -1)
{
bool is_executable = (mode & 0700) == 0700;
if ( (t == 0 && is_executable)
|| (t == 1 && file->url == 0 && !is_executable && used)
|| (t == 2 && file->url == 0 && !is_executable && !used))
{
fprintf(f, "<LI> %s", file->name);
if (process_nr > 0)
fprintf(f, " produced by <A HREF=\"#S%d\">Process %d</A>", process_nr, process_nr);
if (mode != 0 && mode != 0600 && mode != 0700)
fprintf(f, " (mode is %lo)", mode);
if (executed)
fprintf(f, " (also executed)");
fprintf(f, "\n");
}
}
}
fprintf(f, "</UL>\n\n");
}
fprintf(f, "\n<H2><A NAME=\"Parser\">Parse program</A></H2>\n\n");
fprintf(f, "Below the Bash script <TT>task3.sh</TT> to produce the <TT>trace.txt</TT> file.\n"
"(The line with <tt>chroot</TT> should be uncommented.)<P>\n");
output_file(f, fopen("task3.sh", "r"), false);
fprintf(f, "Below the version of the <TT>scan_trace.cpp</TT> program is given that is used to produce this page.\n<P>\n");
output_file(f, fopen("scan_trace.cpp", "r"), false);
fprintf(f,
"\n\n"
"<P><HR>\n"
"<ADDRESS>\n"
"<A HREF=\"index.html\">Home</A>\n"
"</ADDRESS>\n"
"</BODY></HTML>\n");
}
int main(int argc, char *argv[])
{
const char *data_js_filename = "docs/data.js";
if (argc == 3 && strcmp(argv[1], "-d") == 0)
{
only_graph = true;
data_js_filename = argv[2];
}
len_source_dir = strlen(source_dir);
init_subModules();
if (!process_trace_file("trace.txt"))
return 0;
for (Process *process = all_processes; process != 0; process = process->next)
{
Action *action = process->actions;
if ( action != 0 && action->kind == 'e'
&& action->file != 0 && strcmp(action->file->name, "/usr/bin/cp") == 0)
{
action = action->next_in_process;
if (action != 0 && action->kind == 'o' && action->o_rdonly)
{
File *source = action->file;
action = action->next_in_process;
if (action != 0 && action->kind == 'o' && action->o_wronly)
{
fprintf(fout, "Copy %s -> %s\n", source->name, action->file->name);
action->file->copy_from = source;
}
}
}
}
if (!only_graph)
{
FILE *f_html = fopen("docs/listing.html", "w");
if (f_html != 0)
{
write_html(f_html);
fclose(f_html);
}
}
FILE *f_json = fopen(data_js_filename, "w");
if (f_json != 0)
{
write_json(f_json);
fclose(f_json);
}
return 0;
}